From 8e588d226a25c8ea20faac7af2624d6bd29e3371 Mon Sep 17 00:00:00 2001 From: alexlionco Date: Sat, 30 Jul 2022 19:09:19 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20ClaperCo?= =?UTF-8?q?/Claper@8d7d09d6a3d976eb0db48529c1b207d1ef43f374=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .build | 2 +- Claper.Accounts.html | 52 ++++++------ Claper.Events.html | 80 +++++++++--------- Claper.Polls.html | 62 +++++++------- Claper.Posts.html | 52 ++++++------ Claper.Presentations.html | 38 ++++----- Claper.epub | Bin 409700 -> 409710 bytes ClaperWeb.Gettext.html | 8 +- ClaperWeb.LiveHelpers.html | 2 +- SimpleS3Upload.html | 16 ++-- configuration.html | 2 +- ...de4f1d24.js => search_items-a6e5371e50.js} | 2 +- search.html | 2 +- 13 files changed, 159 insertions(+), 159 deletions(-) rename dist/{search_items-75de4f1d24.js => search_items-a6e5371e50.js} (99%) diff --git a/.build b/.build index c694490..79e7993 100644 --- a/.build +++ b/.build @@ -90,7 +90,7 @@ dist/html/fonts/remixicon.svg dist/html/fonts/remixicon.ttf dist/html/fonts/remixicon.woff dist/html/fonts/remixicon.woff2 -dist/search_items-75de4f1d24.js +dist/search_items-a6e5371e50.js dist/sidebar_items-372d70b46c.js index.html installation.html diff --git a/Claper.Accounts.html b/Claper.Accounts.html index fef795f..3483e2e 100644 --- a/Claper.Accounts.html +++ b/Claper.Accounts.html @@ -327,11 +327,11 @@ it in the database.

iex> apply_user_email(user, "valid password", %{email: ...}) -{:ok, %User{}} +
iex> apply_user_email(user, "valid password", %{email: ...})
+{:ok, %User{}}
 
-iex> apply_user_email(user, "invalid password", %{email: ...})
-{:error, %Ecto.Changeset{}}
+
iex> apply_user_email(user, "invalid password", %{email: ...}) +{:error, %Ecto.Changeset{}}
@@ -361,8 +361,8 @@ it in the database.

iex> change_user_email(user) -%Ecto.Changeset{data: %User{}} +
iex> change_user_email(user)
+%Ecto.Changeset{data: %User{}}

@@ -392,8 +392,8 @@ it in the database.

iex> change_user_registration(user) -%Ecto.Changeset{data: %User{}} +
iex> change_user_registration(user)
+%Ecto.Changeset{data: %User{}}

@@ -488,8 +488,8 @@ and the token is deleted.

Examples

-
iex> deliver_magic_link(user, &Routes.user_confirmation_url(conn, :confirm_magic, &1))
-{:ok, %{to: ..., body: ...}}
+
iex> deliver_magic_link(user, &Routes.user_confirmation_url(conn, :confirm_magic, &1))
+{:ok, %{to: ..., body: ...}}
@@ -517,8 +517,8 @@ and the token is deleted.

Examples -
iex> deliver_update_email_instructions(user, current_email, &Routes.user_update_email_url(conn, :edit, &1))
-{:ok, %{to: ..., body: ...}}
+
iex> deliver_update_email_instructions(user, current_email, &Routes.user_update_email_url(conn, :edit, &1))
+{:ok, %{to: ..., body: ...}}
@@ -546,11 +546,11 @@ and the token is deleted.

Examples -
iex> deliver_user_confirmation_instructions(user, &Routes.user_confirmation_url(conn, :edit, &1))
-{:ok, %{to: ..., body: ...}}
+
iex> deliver_user_confirmation_instructions(user, &Routes.user_confirmation_url(conn, :edit, &1))
+{:ok, %{to: ..., body: ...}}
 
-iex> deliver_user_confirmation_instructions(confirmed_user, &Routes.user_confirmation_url(conn, :edit, &1))
-{:error, :already_confirmed}
+
iex> deliver_user_confirmation_instructions(confirmed_user, &Routes.user_confirmation_url(conn, :edit, &1)) +{:error, :already_confirmed}
@@ -600,10 +600,10 @@ and the token is deleted.

Examples -
iex> get_user!(123)
-%User{}
+
iex> get_user!(123)
+%User{}
 
-iex> get_user!(456)
+iex> get_user!(456)
 ** (Ecto.NoResultsError)
@@ -632,10 +632,10 @@ and the token is deleted.

Examples -
iex> get_user_by_email("foo@example.com")
-%User{}
+
iex> get_user_by_email("foo@example.com")
+%User{}
 
-iex> get_user_by_email("unknown@example.com")
+iex> get_user_by_email("unknown@example.com")
 nil
@@ -708,11 +708,11 @@ and the token is deleted.

Examples -
iex> register_user(%{field: value})
-{:ok, %User{}}
+
iex> register_user(%{field: value})
+{:ok, %User{}}
 
-iex> register_user(%{field: bad_value})
-{:error, %Ecto.Changeset{}}
+
iex> register_user(%{field: bad_value}) +{:error, %Ecto.Changeset{}}
diff --git a/Claper.Events.html b/Claper.Events.html index af64d3e..05570f6 100644 --- a/Claper.Events.html +++ b/Claper.Events.html @@ -335,8 +335,8 @@ Functions Examples -
iex> change_activity_leader(activity_leader)
-%Ecto.Changeset{data: %ActivityLeader{}}
+
iex> change_activity_leader(activity_leader)
+%Ecto.Changeset{data: %ActivityLeader{}}
@@ -366,8 +366,8 @@ Functions Examples -
iex> change_event(event)
-%Ecto.Changeset{data: %Event{}}
+
iex> change_event(event)
+%Ecto.Changeset{data: %Event{}}
@@ -417,11 +417,11 @@ Functions Examples -
iex> create_event(%{field: value})
-{:ok, %Event{}}
+
iex> create_event(%{field: value})
+{:ok, %Event{}}
 
-iex> create_event(%{field: bad_value})
-{:error, %Ecto.Changeset{}}
+
iex> create_event(%{field: bad_value}) +{:error, %Ecto.Changeset{}}
@@ -449,11 +449,11 @@ Functions Examples -
iex> delete_event(event)
-{:ok, %Event{}}
+
iex> delete_event(event)
+{:ok, %Event{}}
 
-iex> delete_event(event)
-{:error, %Ecto.Changeset{}}
+
iex> delete_event(event) +{:error, %Ecto.Changeset{}}
@@ -481,10 +481,10 @@ Functions Examples -
iex> get_activity_leader!(123)
-%ActivityLeader{}
+
iex> get_activity_leader!(123)
+%ActivityLeader{}
 
-iex> get_activity_leader!(456)
+iex> get_activity_leader!(456)
 ** (Ecto.NoResultsError)
@@ -513,8 +513,8 @@ Functions Examples -
iex> get_activity_leaders_for_event!(event)
-[%ActivityLeader{}, ...]
+
iex> get_activity_leaders_for_event!(event)
+[%ActivityLeader{}, ...]
@@ -542,8 +542,8 @@ Functions Examples -
iex> get_different_event_with_code("Hello", 123)
-%Event{}
+
iex> get_different_event_with_code("Hello", 123)
+%Event{}
@@ -573,10 +573,10 @@ Functions Examples -
iex> get_event!("123e4567-e89b-12d3-a456-426614174000")
-%Event{}
+
iex> get_event!("123e4567-e89b-12d3-a456-426614174000")
+%Event{}
 
-iex> get_event!("123e4567-e89b-12d3-a456-4266141740111")
+iex> get_event!("123e4567-e89b-12d3-a456-4266141740111")
 ** (Ecto.NoResultsError)
@@ -607,10 +607,10 @@ Functions Examples -
iex> get_event_with_code!("Hello")
-%Event{}
+
iex> get_event_with_code!("Hello")
+%Event{}
 
-iex> get_event_with_code!("Old event")
+iex> get_event_with_code!("Old event")
 ** (Ecto.NoResultsError)
@@ -665,10 +665,10 @@ Functions Examples -
iex> get_managed_event!(user, "123e4567-e89b-12d3-a456-426614174000")
-%Event{}
+
iex> get_managed_event!(user, "123e4567-e89b-12d3-a456-426614174000")
+%Event{}
 
-iex> get_managed_event!(another_user, "123e4567-e89b-12d3-a456-426614174000")
+iex> get_managed_event!(another_user, "123e4567-e89b-12d3-a456-426614174000")
 ** (Ecto.NoResultsError)
@@ -699,10 +699,10 @@ Functions Examples -
iex> get_user_event!(user, "123e4567-e89b-12d3-a456-426614174000")
-%Event{}
+
iex> get_user_event!(user, "123e4567-e89b-12d3-a456-426614174000")
+%Event{}
 
-iex> get_user_event!(another_user, "123e4567-e89b-12d3-a456-426614174000")
+iex> get_user_event!(another_user, "123e4567-e89b-12d3-a456-426614174000")
 ** (Ecto.NoResultsError)
@@ -731,7 +731,7 @@ Functions Examples -
iex> is_leaded_by("email@example.com", 123)
+
iex> is_leaded_by("email@example.com", 123)
 true
@@ -762,8 +762,8 @@ Functions Examples -
iex> list_events(123)
-[%Event{}, ...]
+
iex> list_events(123)
+[%Event{}, ...]
@@ -793,8 +793,8 @@ Functions Examples -
iex> list_managed_events_by("email@example.com")
-[%Event{}, ...]
+
iex> list_managed_events_by("email@example.com")
+[%Event{}, ...]
@@ -822,11 +822,11 @@ Functions Examples -
iex> update_event(event, %{field: new_value})
-{:ok, %Event{}}
+
iex> update_event(event, %{field: new_value})
+{:ok, %Event{}}
 
-iex> update_event(event, %{field: bad_value})
-{:error, %Ecto.Changeset{}}
+
iex> update_event(event, %{field: bad_value}) +{:error, %Ecto.Changeset{}}
diff --git a/Claper.Polls.html b/Claper.Polls.html index 25ac063..a8fdf83 100644 --- a/Claper.Polls.html +++ b/Claper.Polls.html @@ -337,8 +337,8 @@ Functions Examples -
iex> change_poll(poll)
-%Ecto.Changeset{data: %Poll{}}
+
iex> change_poll(poll)
+%Ecto.Changeset{data: %Poll{}}
@@ -368,11 +368,11 @@ Functions Examples -
iex> create_poll(%{field: value})
-{:ok, %Poll{}}
+
iex> create_poll(%{field: value})
+{:ok, %Poll{}}
 
-iex> create_poll(%{field: bad_value})
-{:error, %Ecto.Changeset{}}
+
iex> create_poll(%{field: bad_value}) +{:error, %Ecto.Changeset{}}
@@ -402,11 +402,11 @@ Functions Examples -
iex> create_poll_vote(%{field: value})
-{:ok, %PollVote{}}
+
iex> create_poll_vote(%{field: value})
+{:ok, %PollVote{}}
 
-iex> create_poll_vote(%{field: bad_value})
-{:error, %Ecto.Changeset{}}
+
iex> create_poll_vote(%{field: bad_value}) +{:error, %Ecto.Changeset{}}
@@ -434,11 +434,11 @@ Functions Examples -
iex> delete_poll("123e4567-e89b-12d3-a456-426614174000", poll)
-{:ok, %Poll{}}
+
iex> delete_poll("123e4567-e89b-12d3-a456-426614174000", poll)
+{:ok, %Poll{}}
 
-iex> delete_poll("123e4567-e89b-12d3-a456-426614174000", poll)
-{:error, %Ecto.Changeset{}}
+
iex> delete_poll("123e4567-e89b-12d3-a456-426614174000", poll) +{:error, %Ecto.Changeset{}}
@@ -466,10 +466,10 @@ Functions Examples -
iex> get_poll!(123)
-%Poll{}
+
iex> get_poll!(123)
+%Poll{}
 
-iex> get_poll!(456)
+iex> get_poll!(456)
 ** (Ecto.NoResultsError)
@@ -498,8 +498,8 @@ Functions Examples -
iex> get_poll!(123, 0)
-%Poll{}
+
iex> get_poll!(123, 0)
+%Poll{}
@@ -527,8 +527,8 @@ Functions Examples -
iex> get_poll_vote!(321, 123)
-%PollVote{}
+
iex> get_poll_vote!(321, 123)
+%PollVote{}
@@ -556,8 +556,8 @@ Functions Examples -
iex> list_polls(123)
-[%Poll{}, ...]
+
iex> list_polls(123)
+[%Poll{}, ...]
@@ -585,8 +585,8 @@ Functions Examples -
iex> list_polls_at_position(123, 0)
-[%Poll{}, ...]
+
iex> list_polls_at_position(123, 0)
+[%Poll{}, ...]
@@ -658,8 +658,8 @@ Functions Examples -
iex> set_percentages(poll)
-%Poll{}
+
iex> set_percentages(poll)
+%Poll{}
@@ -687,11 +687,11 @@ Functions Examples -
iex> update_poll("123e4567-e89b-12d3-a456-426614174000", poll, %{field: new_value})
-{:ok, %Poll{}}
+
iex> update_poll("123e4567-e89b-12d3-a456-426614174000", poll, %{field: new_value})
+{:ok, %Poll{}}
 
-iex> update_poll("123e4567-e89b-12d3-a456-426614174000", poll, %{field: bad_value})
-{:error, %Ecto.Changeset{}}
+
iex> update_poll("123e4567-e89b-12d3-a456-426614174000", poll, %{field: bad_value}) +{:error, %Ecto.Changeset{}}
diff --git a/Claper.Posts.html b/Claper.Posts.html index 7aec2a8..8a3d330 100644 --- a/Claper.Posts.html +++ b/Claper.Posts.html @@ -263,11 +263,11 @@ Functions Examples -
iex> create_post(event, %{field: value})
-{:ok, %Post{}}
+
iex> create_post(event, %{field: value})
+{:ok, %Post{}}
 
-iex> create_post(event, %{field: bad_value})
-{:error, %Ecto.Changeset{}}
+
iex> create_post(event, %{field: bad_value}) +{:error, %Ecto.Changeset{}}
@@ -295,11 +295,11 @@ Functions Examples -
iex> create_reaction(%{field: value})
-{:ok, %Reaction{}}
+
iex> create_reaction(%{field: value})
+{:ok, %Reaction{}}
 
-iex> create_reaction(%{field: bad_value})
-{:error, %Ecto.Changeset{}}
+
iex> create_reaction(%{field: bad_value}) +{:error, %Ecto.Changeset{}}
@@ -349,11 +349,11 @@ Functions Examples -
iex> delete_post(post)
-{:ok, %Post{}}
+
iex> delete_post(post)
+{:ok, %Post{}}
 
-iex> delete_post(post)
-{:error, %Ecto.Changeset{}}
+
iex> delete_post(post) +{:error, %Ecto.Changeset{}}
@@ -381,11 +381,11 @@ Functions Examples -
iex> delete_reaction(reaction)
-{:ok, %Reaction{}}
+
iex> delete_reaction(reaction)
+{:ok, %Reaction{}}
 
-iex> delete_reaction(reaction)
-{:error, %Ecto.Changeset{}}
+
iex> delete_reaction(reaction) +{:error, %Ecto.Changeset{}}
@@ -415,10 +415,10 @@ Functions Examples -
iex> get_post!("123e4567-e89b-12d3-a456-426614174000")
-%Post{}
+
iex> get_post!("123e4567-e89b-12d3-a456-426614174000")
+%Post{}
 
-iex> get_post!("123e4567-e89b-12d3-a456-426614174123")
+iex> get_post!("123e4567-e89b-12d3-a456-426614174123")
 ** (Ecto.NoResultsError)
@@ -447,10 +447,10 @@ Functions Examples -
iex> get_reaction!(123)
-%Reaction{}
+
iex> get_reaction!(123)
+%Reaction{}
 
-iex> get_reaction!(456)
+iex> get_reaction!(456)
 ** (Ecto.NoResultsError)
@@ -525,11 +525,11 @@ Functions Examples -
iex> update_post(post, %{field: new_value})
-{:ok, %Post{}}
+
iex> update_post(post, %{field: new_value})
+{:ok, %Post{}}
 
-iex> update_post(post, %{field: bad_value})
-{:error, %Ecto.Changeset{}}
+
iex> update_post(post, %{field: bad_value}) +{:error, %Ecto.Changeset{}}
diff --git a/Claper.Presentations.html b/Claper.Presentations.html index 91c0c6b..72ba34c 100644 --- a/Claper.Presentations.html +++ b/Claper.Presentations.html @@ -235,11 +235,11 @@ Functions Examples -
iex> create_presentation_file(%{field: value})
-{:ok, %PresentationFile{}}
+
iex> create_presentation_file(%{field: value})
+{:ok, %PresentationFile{}}
 
-iex> create_presentation_file(%{field: bad_value})
-{:error, %Ecto.Changeset{}}
+
iex> create_presentation_file(%{field: bad_value}) +{:error, %Ecto.Changeset{}}
@@ -269,11 +269,11 @@ Functions Examples -
iex> create_presentation_state(%{field: value})
-{:ok, %PresentationState{}}
+
iex> create_presentation_state(%{field: value})
+{:ok, %PresentationState{}}
 
-iex> create_presentation_state(%{field: bad_value})
-{:error, %Ecto.Changeset{}}
+
iex> create_presentation_state(%{field: bad_value}) +{:error, %Ecto.Changeset{}}
@@ -303,10 +303,10 @@ Functions Examples -
iex> get_presentation_file!(123)
-%PresentationFile{}
+
iex> get_presentation_file!(123)
+%PresentationFile{}
 
-iex> get_presentation_file!(456)
+iex> get_presentation_file!(456)
 ** (Ecto.NoResultsError)
@@ -379,11 +379,11 @@ Functions Examples -
iex> update_presentation_file(presentation_file, %{field: new_value})
-{:ok, %PresentationFile{}}
+
iex> update_presentation_file(presentation_file, %{field: new_value})
+{:ok, %PresentationFile{}}
 
-iex> update_presentation_file(presentation_file, %{field: bad_value})
-{:error, %Ecto.Changeset{}}
+
iex> update_presentation_file(presentation_file, %{field: bad_value}) +{:error, %Ecto.Changeset{}}
@@ -411,11 +411,11 @@ Functions Examples -
iex> update_presentation_state(presentation_state, %{field: new_value})
-{:ok, %PresentationState{}}
+
iex> update_presentation_state(presentation_state, %{field: new_value})
+{:ok, %PresentationState{}}
 
-iex> update_presentation_state(presentation_state, %{field: bad_value})
-{:error, %Ecto.Changeset{}}
+
iex> update_presentation_state(presentation_state, %{field: bad_value}) +{:error, %Ecto.Changeset{}}
diff --git a/Claper.epub b/Claper.epub index 070727a018e8b62006420339117219d3e51e36e0..82c55fd8576a451b03363679460ee2885dc373f6 100644 GIT binary patch delta 32345 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%0A&ud7xfgEBFdat7Vld6!v7DOQZYjj9i z32?%e9b~Du9>Y@aV9s!#_pbb7aGIGOVxctt7767uRrROpRWjot%Ec(esEMRoP`qQhnM@!CTcfVAh6% z3!=NHQecr(8cbnknG5Rpq6|8HNli9@!(GR>7iTQWj6K4m8%398Ch7jJ{$Td{{FwlW z(iME8?1T)C-%U`K-|x$_fHnqGdRoeS5Y`4~Nw^(w3vn3afj_X=JXt3(@Nmm^jIUp; zCJQJJ)6%!eJwcM#u!NOGbcPq8@-$tb_4CCFHv3TFNu zr{Q#%-G85E>GR|6BOlB4WlDKnd)L}gC9{C-Cm-pu1!f7=n zLjnx5?KOoUui^^h@wwDGeuCB5OqhL^`@sXg(E7?1FQ)^=8OOVnBqD~SM#Vk1Yz5W5 znTt&@{ab+_*3Trq;0zs5fIF_kXYo}2D$N(3mOlsK*!9dmS1^s_v?LempU4ZlE)H0H zaMN8o!sxBoAeufEUL+TuZ8%XO6=Mv%Ye>FGo?V(e0)k|x-)z0$`XtKgF6O963&)-sj@e3X;+*;Up!^1 zWGy)M;mLE=3|eNrK+W&_c0WG)nAq{nT*YF$yf=setFsxov1$S|Q z%8tfn7uRcyxG;0GE(Xgq(fVCw1rX4k2|}4_#jx^0(3Ks=$bmVJsdksU3caY zTb|WMdOqgB1#3nL@Hh|CGK!>BNmUcL};_OJ8 zX0T&FsI=$qQeeD(7rGp*;*z);v*56v%A-XA(}LXO74S?2Z&Hb-4hZ26tg zW4-gy=pZ%1AEf>or;h$TQyaZi;BdXht2t66(@F(G05i8FkwANXg)GTmlSruih>KJe<@9d$UTwrwoV@}b&zU5eUM#%6}rnOYX!$CV2 zxbm$_5Q?7RrU;+Id-bXrNygN%Hjgxb$3Z7+OG7L&3<$jCEpEP8Pl-HtMqYPu$maMf zMEFNzeemt$7j(V&)MEO9n7jTJpSX7xv#h4vL=89 zIUF~$n$p&_??26xXpRFfi)DOO^K9}nKu)!MM$kDhhfz>^+rBc3%oB)!^gXM4Nr{wf z%xe>r?s7l3iX(N5NB-Wl5iL2pXqS{&AYs(PGv^V9BmX4^n{y*iOxKnMwPcj3s=gi{ zTV1#ser*x8qIvp_^j_Oiql3r7Ql-<~sGAG3uS4a=!{S2C3BwQ@x~9S5R(qm?pM|fa z^kyQ_`)umfqP#6VbDKz`p;mt;bTpcUz_dG%Is*bi`43w%+{Hak*}Iq63))ULqC*uj zTd*PFqf$YcROi)F1u5@*%G-RH?L~k|YLY=h)=T4)SHx45dK@;tyy7vhIS76lV@DHs z2!CiOS-R!)G4Q^Uq|#u^{r!%9)o@0bja8&c%7&}3#r);OH`xmxZqJ`zWPdc0!(2$} zft+_E5+ph-ZT*;EId^ec`dVZ6Xdy}OAwE1~re-!xP{wgS?Qh97sjI;so}GL1LA|q> z{P_x^*w-WliT8uk^z(;;ysfpiSIj9q&WjPYled~G-2x))|IU!lezD~POZ8MhC3em_fREj**lU2id>gw zq+CFF(y_A&JLVc&i0P>|1mjNX(WRN!tKo5fccD3NZ5@K$ANBwkEjddJoLzw zuDP>tt5vO^7xorC5AQq=l9xm_6{JYT^2`AaCWcwyD*l%#(tO{Z{y5{$>+Y9)?9& z5z};rFLIA6m4TY`^c90}EqCdY?qbjn$RD^W8@#n}wUm_DP4_{OielaZ_pW=m3-0XI z=t%316-|a$o`kGP44hg=`F*%NU)l`)cM-$`vJM_L#&O47W0}&t;*>Bg)@{z1EC&fX zA|&}m!99mZxM#gl@q*gMAeht3gXR}uB%LHuEcbD_zT3869E6>VJE2c5HL-jQr2-2)AB zKdH3m6kQnpFkz8d^*530Y2v@@@-@88^d}A7y_*t;`fBa#8M)*MJVom`e)l!+v(~qc z{DH5D$6U>6VDI^lm%MI23CeLu=L#te4nQjo&se{Pgz#j>Bxn>QnI6tG_VM>UXVBpq zBcmAEd0#d#o4p3g-tyuR$Zkxls4=w`f04pfv8DC>*-TDTG8c)V`%-%m>`oJh-7!VG z{~;Rg_)oP|((k0K@}dK5QcTVb2Ao|5dcT+tMw4ZRs}6U6k4)vcxQ6f67Iwb?eNlvKa3p-)#SaX~<0`y2oWa@X;|uahU=xd->V|L~`H62}{G@-A*w{X?a+j z*nD?v!<5%IGg?Yn3A(a#bNUs=1$Pf-LK+QML6>T_K|P!VPfgAHAcUPH;q37TC9SN6 zjd7zPq3W#;2BA7>8PD1hc4g|%V7EI6zs51eX0(T27ov#>N*DC2|1iXm^^)D0iE}ak zdC|%-DrZ6pD8#`n@x!;`$ROA2d7YDQqxu>U&ok9;c}U$E=43hH$dxMYy}N6*Zutt7 zcHfDC8eKMJk%l@(w8l;&7M;qUVZLZ9Z{x9aAFc~58C*1ymlM(se}pp|L}XXkb0zzV zI*hO-xrU!pAD|L7a9+FDyGVQEhBx@}j?Rj>n4_lYH3(c{*tD(Kz+}>7=A9V&X*l!; zjhENeNP3jR@sYryFvJP1+YK+D2yVRmuxq73`GFZcqh7aK|Le`yV8-q4OSrnX=F%)A z@oDIc!s>BjvX>uud$+-(JN)KQ5t@`oc-=AE6_Qu3a&DifWNBx)dMpJ*T4G1GRA}C?FgB0Kxd{D! zej=_?S-2wYt`C@4>=Lhw^AR!u(%iO&kjX5zg!+RVz)gAn4%~;Kw-u}VD(A0g9@KvG z5ml03ylNh(%vs6GoHr0>e^{n=PG6zXaceE8+*nKuK6TjRU%671Z|Cjw3yfTlT5T;@ zG;L?d+j(!*~Ty&G#3P^+}05l}mKA_Y7B`jQ^59Q&~dhBRs> z2Cf{m^h-7GZjHa#Vihqp7~GoJ0SvTtg~N4q6T)?^8Ix%d`6ZKasUoAUND<-`%Ad@P zXBhh-ZTODXry)-p4KB&g8!+;}f15tf@ZFMn0m0T?;lrKt;xPpi z7DryQe5qu-{+L~eZ`0@WT+R0VuKh=q*!Vt>_S-Fy`Hs0q=<0qt(_Rz6^WW0-;-1GA zPQyA3#jw;ZE%hTFk(TGK?2nT+$KEeL_^MU*`^YB)LGhV7jv^%yMV#wB`JJJ7HkK`U z$*aDTRE#w{3;N_yBL$i`Pij(u33cU6I;%zGxyjUmM0Y-1&KXDu2TYS@@(({-Krb!! z;yV*7WLRxXv5{A2QJzJy=B8qpIsWeM`{i>xTM>WGZSL^Z@>1E$l;st~!|Huh9uYHf zE&Qf;M_+O>r<6Q~PheU2X)OYsQ)idW(9*o!uN3^b+j!|Eg9>XPg^zn;d{C;jIZYQX zcLCkH7)3Q-aVp##6dhpu3Xx<=ki9}4!|ldDUu)Kl0Uxf z@Hmq=ZBe|Bc3FefBC~&b02nR7A+6PC+q#@}BI8tVdehH|YLo|W_9hqpnfS3lH?9{7 zJ5M0KrjV%7clu${S7O@{f~PL3Lt*$va#Y39^;|s%FvZ|qCF7)<*LWo1@}Rh0NmP-C zI{1;KR*}tGjjvl3wO(&d4K`_|4!_LJ_ao1*S|22nHIwg7vh}t(-cUUZ;_-K8sp`yaDxWUk=mg!L7EcUt z#0tmXpXOXqweMz$%LIW)$NGFbdvHPUN8k-AinAzT(j-_vp^VJDtzUDZasl(rsu8=L6h8xmGI8oyqmOZdxLi81=>$i6wPvo(eDLF5S*t7ZQcq$G97D5Mpf;xgO zqXTnMp`~DAp!q+?XxrpKDQF4IMh#qfY6N4_06U?D2^t_bw17+t6oD2LXo2F;LL@Cv z2wLc)1xiB;=yX7BXu*mOsPW%~nBaCgARpyZB-y8Ac!U5Lmw2r$)^VBzrKpAvgQ(@TM|7$CSnFe?L)8A`1W`3|q)fB=5&07*Tu$N)rx z>iCpJDgy`uBS8WK1Nr&SCm%Ki+|B@Gg7WS?VL5^k8G*FW@9c~~QaEGZWM&`%*o+ZK z0IhuYRLK(vsU%8{K>&hZ2O^+=+Zq2TJNnd05%!-}gD?b4FcA|F4ch5fv6!jRkSC$m zC@?TQ|Iq;kCLeY$;y)}5kqAU!Rn9+v5lj%k!RSA&1mFPXKRwzEsT0YELYNCxdzEHgw7a~h`B4OI0Td(P{1?4O z@?|CiM8i%b7#Qlm&|Au(kv>pqw*Kjfz7>d6z$Qq%P>Wz>oeG&;Zo!*^Bp#g}7oLDe0lz)+Lflb+f?9i^q zvq4Pf09?Ta;1 z1VJj{1AiibbABRFf?L@C*ufB_8Ws_}#SUbndRjkq#-?jx5UsW#A)IOd1OH@7%lio6 z-}?x3P*Z_I+HpW2jgJw)e#Z!GP}73yc!^WQ;s${bf*8l&L(c+U;Q(?%)3}5v>PdsY zvjYiWm%tp)foxDfljjh{zutqNKZjV$_B{gDe`Qrenqc)I$FD$PC@Cr@M7B8s033(_ zp!=`vr_?RgknvfB3@X)M>JNjxIf2iiyyZ{4EocDn0vdn{YBK-Lm5|H@#E0xJ1YAH? zXlK6C1dpae0R17$;qO^u1)FgJ*`YK4SM2Y$vGW|tQoXiarfGR1>4H=6iwkLLSFd;ht2ii%fxO+e8ZXpQ!ImEWv{$l^k`49bf zZXg8|<>U#4oA)0j9C-m~EdSc*wALeH51({-2GQm330DG}@c_A@62FOmZha!6fe`(@ zDWHh{gZ-Tc2#o{|-sOQv9F+K{mWCHd3GHz|2kOpy2!JgFfa@=nC%|UBKuIVODUR2M zI)umw?cY*L!JWK+ww@s;t&S|ngn<6ngor9X3B?6FDFZN|vkC>}24vSZK|mWJaoPX2 zMk25oACMDD6s<9Y?+7s&_t*bkx;Wr!zCYHv$_MFLlNDHvA4m!&<_8i$S$kn4ktNNb|tz0zh8Yr=>h#!XrBa3j>1*A;kHM2-61uqb4h* zuE` z0GyKrAZ7cvz5X}8Jj7=I1Msv#apwZS8o7`a-5~Zye1H%H$*lrfO$M&401*DK>-^6r z5}e9EBx;oa0`PO;KNkgPG)@c{n0vi{_q4hSd?F0Q2Y(R*VnaIyjm!cWYcjZh?>oET zPr|_GP$HDy3S|lqB0LBY`CqDgfRBZNtWYa}262H*7s9)L3%%(C{}B2Ag$_%rs4M@U zLS?{#B7cNhgjnAzLWoEpLjNAGG4OX0AO}<^?a$wB|F>qkGfzT^!2+T{9O&$*h(ZQz zeii^enFWx54LJT>&7R&A%79#yj*|X;vz7p^68&?twgBOUvpNS?i$eBy3^5=fRJcH_ zUy3F~LuQDEjDHPF;PpSG71xkN0xpnQg&N>rk8l5?C%FZHId1`EPz!+4MklREnL`#` zl<2<~-U2%CiIxz2F9zulWW9h%#36+M;y=}D;(xZ#*H6_OT~alKDDb(^@Shyo*y=Xq6`E84eWm(Db@FQ1Wt&*w_1r}@c-TGFTn{Q{sTxr1mJ&w z2$mA?ACN}OgZvMiqg6t}{B>5vz129;NzBJ30O{DTa-a=u-ckcP5!;reQs#br2lUn< zT7(k0aTwUMx!TmnOC}c?9j?X}Ff7c|N5qZG{Bi!+`7G^^q#73_NL=y+GC&u?x$lJj zgg~ngn_BPl(G&D&z8Kmc;1hcSp7$tO(O_KYjk;g}Li>9umD=vHH-WQE9Wa`0u8dhH zAjZNy9Y}(3Kj}L19!$H@WsRPh_E;s@j{ItD2K0XAfkPNcG~#gBS*;-JO}5?IhbRXy zX0i$|WZ5^VJVw=2aSw{{C_}9!uAIV)KVJ`pv&&p5xk5$xyG#d<>Bc14+Pe@ru{iSG zaY?Rz+WoBQK-kdpoIS!&n1WQWqv$^U04d<-$Qp^dr&nyElr7AiM~WnDRuonx7klfp zAgA=8GRw?ymBo;_b0d_hFm_y*5H2J-xOuX}3BGZDy%}@C9GL9T6x&B4*FmZS5TT&> zIHPs8P2}{ef8ND3SV6kz5JgN`!bIM#&i zmAZrYR3LkCYZ;|8aenmb@ii^gx`vHj+iXo@hoUXOsKT~SZ z{#xS1qV^qaq^qDPAc9m2D$Z(cJ1H9k&WH2E~sWI-2w~=$S3nXC>d&rn!X71V0 zgEJ`@oj4-7!Zt?8CXJmBAy&>Z2*YLmhWfjL8j=b}iNEi!)=M>huHvb;Z-j1s$#wrXCb}BOVz&O zB%Xph(rakXcLQ?#itgv%HFj($-zMP;FRoiM+2spj8$H4b{-jZOD8CL)Wl`<8t-Vhp z6lZhFB@znU(#vMElW;v)f>u0d*{t79WpA1VB(qt@r`C!?7Hu>PLoCD+*h1#_opD&v z)X>h$un*0pjJ6Li2W>Cy){c0`@CWG%J5!5kYzA~<@34e&>Lr-pyzv*73bpGo^A6)0 zdhQ}RRm_zdd4;N1ZsWp8feyg}40)UY}100zm)o z=ie*Eqn1cTMhRMVTIE3UdDO`BmNv6dPGGFnjZhIc!dI}7BApq3l7fiO3xg!l1e@FE zeOakFO?3fRj$xghQyncDk-aC0(8asZ!UJokeGHv8!Qz*NNGeCajnRD%ZlX;Y^G~K$ z)8(EptFPrO<-n9FUA=tFu5PMrm`3k^b~1=x6N%N37zTO6|3;@C9gyH+qgD=_J9W|H z?ubi)f>?{%`prtZj;@3?fQ^w*=C4+9w>Kjq|E{Ps5XQOZDV8BK7lZ+~3 zNi4k7lK`?B3i|`Cgi(=h7ElC1o3G3rG)<3A*?FsB>Fp`6=h}{W_+CVqn~kz+aHdaW zEDRT16m}ZlLM5LtFrbA)d976w`x;pvDIZn)PAfX>O5=5TBndUPEHU=|%H$AVElvw_ z+QeXfj;M-Ith~;#?q|+U4(6UUjYroPnIvWLEh*5XGu))PEYzWti;NUX!xC{aGC-b$ zCO!zOPc9=f)9w#yfKdoJRmcGnkC7+G$l}k!To1@i@vj}C%oE!hIYdtsIvq4v%nIyt zl!i8z@YW5+4OHkW;Aww6Mo_MrmWV6jb|$?7w&$+|O3pb|O>rcMx<;mP>JudINQil6 z;N(E*OkJLq?eg2Lu#7^AKUo~zlc!RLsq$xrV9Z?7^@+um?+f?e1Az0SLgCBxB`=)_ z@DgML~#$ne~U3b86FaAK<1uaD4`N&(q^3d|wMk{&XXP zk$IY7?J}DUN#<}g+8Vge^gxop^a*7~K^uVpy3izs_^M8ePDwA{f0;(x6Qr%Z)S4|i*h!)bvGUpZdChyztMd;u^#d;!JnevxG0nhnoU92R_l>=njvc#x~VlJd6az24k5Lkqi+-rT>#L&n0#KfBLQ0}URfOFpn z1Y6z%`t6wena|Xq{&ovknU{sn3@^*KT+rJ_k92zps%r;?lTjz;AMlQgeuIS_z9v}& zGx?+SR|9PoLHJEMGksQkZa;N!>erCSK(~bm^?JF+@b=Ez6h9hqUA%_xI2_ZqOJIcc z2pc2DNvKng%mv4IHHI*Y=o0nQw#q(tiOf{^pz2k!ha=DwthblbNtNNwp&| z_-s3I$l*Sd2KvkW8$nEDa1@mO5p6U9c^8X8N?{Q`g{8 zf=E|`hGrPl<>MU_W~*l#8PDJjW9-hM#~x>L%ye-5&MF2QaSLNp;?3BP4WPYU# zwq5A7B0eC7TQd>JQF88De3+p$x$3qHnxn?7}(gYuFVVl-aEY z{MPeTN79x>X5ggS~lO{;{@#X(C74-i! zRlOrM#+UyorN9W<&hhYYC4xGDm)A!^{jEO}RN1mGE zWR-xSk`4%ig|Rx@v%2VV3)6t7DKWaDq#H3xgZCXVlK-}okeOyiG+eiM?AAs)sXf1? zoYAwSB?KEl!+?i!r79fpu%Nx2p7Zp%Ok!B_$t zmv9r#%U_T zkQdcde3pi4`-V;Y?3696g~<6$4LPwW48v0Bv|2H~bmjav?GcgpCfQmpQf8i4U?=3;=?R z5H&mhB&F=EAWa4Q`s}7Wf=jntLiHQc$~L1$KseBYJJJmT%Ohr^LvQ4(mNm_^Vrr!h4RrccY#giyt&k_ zu%OO{SylZLsG=mmDz^Cm#@W$wWyYNA31eE0S)ZOto5VrzrR_>#KhI&=|Nhp!|2ATc zJTRHoli>?h%q#Rx)y}g99tA3|?y(6da>FllOBz#ynsl7qTWMlkb&=1ud=VqLdc3Rj z_e#ExTUnIJhY#R)LXNS%2~A*=tcAEbG8{?5o^rY#jOFhJh=AYB`p3>6;2bxjTYI&! z?+Jo4){KD$@V9?cGO+t)0yuq zcO#_X@&aqDyCBq37GKWkfx9aJ-P6DhLA_r6A-D|v7{cC?cvyl@$us$eR#LOEW?$`(#zNx zv590*ck}Mx4?Cx|{1HR6YkYP+1zT&-0@r){XMUum0}JsbF!E!oanStiZ&!Ow@pd>j zR>Pi<^LrBhhX(G_wZ*p~dpb;>WsSFO$$hp`OjOg1;!?n3)0{Ca$TG4d`mU*~7@xX# zUFGbEJ*OG^dP~X429`#R5_hpHfWMKdIW+_oJ&DT}H5j6rJ|5>S90mJ__GMewY01*GUmp(xI zzlfGWfbc)=Z4?lT{$C!B*#ZPY{ny{{2Ba`#raF29a8nf-ApyjNLusT{~ssI1c{hx{R{B5nd%9U@-Mje4N&l3aHARU|9?t*0MPtj z?guF-0#Y}ifC3==Ln8$Yjw0%ZI76`&+oeQdnT7!|5}1S=;8E-*v1={b7&ac@8w6QO zne+3+&?Vj|4Cv|U^?b2ga5H~yPm2xu9BO4Bd(k-yhtyp7*Sg*Nc`)M~50+f%tbw`h zFZK-6pqj%pr>Klda3?{A-%+DR%i;YftxoZS{oAfYMS~z@t{`f1sXe~_ES!LyBr3Ua zJWR9wbptfjuL!Kz(RQpPC0R5^ zL48yhYl?`L7jA@NQ5@eu-n$Bj$1H<{@yjw-EH35&n$}Th;|H3VKH{#@<-KJUTxu@t zLol-xdDx&;=KW~K8jb65@=k*2pA4lVY&p7$n*(L2N1Du*aq5oyQbl(O`|~E~l-DMF zPzpAfRa!j^;xkSPs$X7sudCWHv1amUcLCNY&WejC0`(z`_X%LZz|{E}M3 zfOfF9VdsJeA!Tv4Fk)~>t&&c7gPpP)s#`UT2QDF661q+ zMam$f)r}AWxbcOoG?D32UZwp>A;d^sGBUV9ENrosi7@bLXaB`AKT?zn(D z&#ZL2?i+#IoLkV3Ij`d4-MEUjP5H2nQ)T6om~iec_jEWhvsDpt~^npwC3{5WBOD3R; zNfLSm5QG6xpYdI>_u6nlf0eD0f|p{RJpbb4XYqz_ zicUI@5xs;)X>)84rID@ba&+LOgXYK)ZIK!xx?J34_!c^H$yIJc#j+4sKs=MCT# zIB-E4UP$=5&}+KUj0nYhqH}oeD>%k%Cv#puHP{9Fk{dLtlW+?B*cK&_*a2OmdbCDs zI*}}#(ft8P2+H{V2;lw%e0yJ3F!dMO?8@FXfXi}h^Wkrk^Z|4rn#vPT4tj$Rs=QuR zWWKOiRF6EsKIJJ9h#H>damlzgl>h_NJ9H$CW_;RjW=~w1^f>~q-nq+juz%PuhH`5Wy13mT^4Kq*V_s0|bNtvC&bEK% z#|mkE)gSEsf78GSJWvDp-!`ZnXF{-&N{s^K0m)~LeEG5d!c-*$1rGrWU=!2PB}*VJ z|Gn|+Qy`&DGp2a{dS%|yPpHo2VspqjCh;m$L$Ld8zuCP;xS*cxB>3UWg4XC99))(~ zDN##z_v7V|Kx(A{SLS#?W3s>c5s#P+duWib;^w{It0TqF@L^0|Hw(Iyi5Ux~7WfuL zCJ+m(p@`Un4Up> z?pqAoON5OP5+Mn_ki=S=dCjFD^{2L6F(S#(zg0t9xryaL1eqTy7#b;Ib9#vn3S=M6 zI}+FEul!Ql4*sZ03Ffc1y{JPZW_0zot|JI9YI4@GKK*{GZs7i@K+3C9|krbK{ zK_bm0{Ca|}-xop6O58VW&U+2`{kQaHX&>9l#3%G~AX7ga$*cTn`7%Z28b zwFy?(!fR$VKF9|RK34ktGtQwvLPEHYC*v(t>Q+^WzUdq3YnWNWwf|Abklt$L1>wrJL_8RD?8Z(Y-EX&bwx4^F0kM2_2wi{1q~^@9Fcz zse8mI#h)ickh`7fx}7|+>*<$)veg!AP;jG0i;Du@V1moRJ(RGStzIAJ`XE8Cg8+N9 z(cg1VYsh;c>EDxA_+>>Il`Yri4fTA1G%A{=s_Zoa@0Tirb*2e1rW4UWotweuxKJ}#O={!Xd5+ZYuB1`6*%?9vWI5jxSRBEPm&Wpqr|OKmX6C<9fKPe`|E z=HWcMc8U!WwmFa+82`@&lONdm z4=oD)pE%tT1JlQ_jmJ%mt(v{h2radqlJXp&Vn9&E_HN8T_{%le; z%A}3NPrBXC-cM2Q7qf(^n;#!PfL~hkRBmS+SM}=#M z_&|~c(SJy!9A0*N{sr~6r_R=G$n0|hmwcN(E>qG{sv{+Z5&*!PrABl5RtwFPf@A^% zg*RC;MJb}4mcS0$7I$aL@Z1F_aOLUm{hjOaPQamp+X}Jmh$2PQl4@B%#p3P0li`~2%Ffye;}mTGn8M!quHz-&KnncC9v+d?P9KM4B+;Wo+FW~9 zR3lNvQWXYwCgmxWC7I<&m~*Aeds?DOgdSHr>{3J?0TJw9<8KqDjpc7m4!>Gx>Av zM$Ym{FeJH?SvE(_$tqGi?=R$p23wI*%49NSiNgO)*$KQ01V!lk_Lc^z|3!L0^<^Dt zk3uytgp8NUi9v<)3(>D#siIDu#@74OWg(Q4SH&cd^75fSwd=hI(|GOLd5pWdJ5=G1 zUe=vl$`QqoH$VyK!-q?{+c;f_Y>ukn>7GrM9*pzifI^7GLt|F$6@4P%)2sJKOp)jr zMXX@6od%kJBRiu*qV?;q_B(0Gi-VvIndQV^m5hrV6mUQX%WwLE) z5nr@dWVNM+B{I___KI*rnU#<~HZn}7KiuvS&zx2u=b);IR_CFv>}JdQ_??3NR@ z`zxWrta>h%gba9zMEU<6G4h0D2$)OIy5`?*OJt`g)_aRH-Jim--Ao)CK@ZsPqwh0_sGcWXcg?FBKO0;jhmeP^4{O*~M zo(c|oSkb*l?Hjvkv8zJEK|`%Iax3RUKG~+e&!^PImjHQqnS;2~tNp|r?r;q{IhAAD zUP*OVkO>|NY?cg`F~8+k<+AP?+Ukog*&xA|@8z3Xl;COJ2FoG=c9y4F6XKiEM6xHeYgS^W?TfstBst3LvLz<#?AP@#0@w@rdam#I(XLX`E?D7%wSB>y6tAeciv1)-}qc1%D$sl7ZmGIGis)m zq`+!czER05X}wKT>RagC!V15)4Cfe=iFlzM@`R9{2c9*Xddmf zkq)W~<>7;)$TPH6wwGRi1J00_aYwL%aodXNqpEgKjdX_ zq$A>=>TVQ_>YJT67*Fn!!whS~=`t63@6o#UyO=`-fr_CCXt#IZId>p87J-~q}+re2P= z`*h<2`&eK-oU6law<4T~oRKcG0qD!Jy4k&}7ufNQi7xtCS49mBtN8IP?P{y8sWJV% zm$-+vo7%iiCQgZVh+JhFg=DJUkgB7SJthy1i+CYOzIzc{O`T;)LhdTnw||U#*SFHX z8kvv%c|qHy_8_&LWQ39K(#c@`+otw@|1wm$Mt29DHok@)2D4R4s#xIx!~(y&+>g4q zYMxn-loMg1`HVmPuxygGydZ$%nha!RX2?g`a=Hy~Q2Qa#yRYj6F#}m?{32M8S z;T-!QowDXy+Q|ajb55U1pVryqu7POJ!Rvb5+h{a}TGpDNAKBH<-G3*~K0n9RzAN-G zq4{jqSY%kRAqyMAJKhaE+3kEKTK|EMP;9$`$TawA7fLKr=Wi{#F7xO(aemDIXd*PD z%PiEIw;+ENFp)n84bXQEjAvEV7RHzTrJ7a*N@2Le(6&&OhWp|q!3v({pqYz#K~TI7 z+w?UhEh*z!M8&ozz-7*nymX;PF?12jlkFT$Jh`oZ88GB{$sqN^F~P--snud>uYG<* zZT%IUqVeQwMeD%cS#^vlJq05kz&eh}j0ws2wKC5`O? zWKnfM$!WPIS7B@I8+6~msyHb;%VWXy!mR8y^ny?{TB|+w!O(Zz9dUKlOp>L9fwgTo zEc9CtdwWkYs29sr{$iGjY9Qx6jo0;^sj%*1um+d~j`;To zT9xQ*bps3$4D3xa6}bZZ0r&GrjMJm(9y?Ck$=mY`Ez!G-=vTv6xMbd$B z@wcPR%k8wo_VdOs!GYOlhq-&ErVn*6Za0ccHy&zrH}Diz^N+yQ5m`un(YN&Y&=SRJ z|D=&6VaED+Ztxs3x*03tTU1zqTQn{-xMVL^dNRss<#Z>bM-?zC)?$$RlH^#eaWj+Y zVUu=MBpEz2XlX@Vi&!;HHP{YKybjALTz6IW+qk#T{!nkQYL9x)IGc`mP6+3K`rq11 z1QuPsp#vKS+Bsm{?@2(EW|Gez&9bhL$_Ou6-Z4>3b@_w)=F8x;$oq&Nbdp!4f#M9i zhOO@VGqbZDu0slv>ozD+tyPA?gdssvNA19xnOnH~H$J9eYG24}R|_4d#_HWV3p0X_ zW7E%)d|{C|(;(A6Lr&D^4+1ET~Jc)n`URF}05FIW4(By(cV4t$nwR*dz z|F?79=k=Y@Z$&GRQl}(tHI1hJOw!TT@(a~xZ$C!1=0OM@>((HMyf`k6y7Yl`6k~Du8ge)M~KX)am@Fs%)oGJ=AvUa0sVSYGmoua?wJbK_3 zCS{_+(%gAgVn=~tv*C@UAcLj>SST@oc_b1HffCw9ncAFZc}b&BWh>i0VkVR|tZ)#G z3xJKSYXo7>j>@w;nVlD?k9mn!;+68!L#5_*Pkuw?;EJNQIqfXZ(D7)g(WQ2J3|DpD z;pc+&7Bb_|9#S@6kQ^R62Vr%XzVqpy#!Gb(FQjob;-^%cv@gQMQ9u|bg5igE`U`o- zobMWgD0`_$BCz0k>*w;O;oC_Uv0qa-9T700VueJ+JXzSuwMu%~K1GR1l_wlP5wXUf z7Z5L{tizUIKE1u;(bVaBFs>)WKG{RsM9UvMGA<7jJInK zb8&%2?UaW~M(7Us0gX<$F+`>X@&nA5ZeF}v&zKLq!4AWF0$ym*k=F8b>8Tz>Yu)zu zAFPH5{7I4wlWxU-tR8oYVtGlos?NCFe6L6+X{%`FG$KNV&U!4oL`8%1$k}#>!qNlB zmeXTWR%K4xR(OF@#w$;gzRMyX7;Y-cNV)hGfWc)Pj*Ogy#T-o{X{H$tlFda@NlZaX zPjIqQ#^N&sZEqQHYNM{Z@q#DXFd9{g&WeesQV7MW$BDA|{INK6!0X7_^P}qO5EG@A zB=MuH7%C|ffc#A#kleN4MbiXJZf!LnU3@dahN(KR?2UC(>^Uh3yOU$j_=kJf*;&fM zh=qr_*L^qXe)tI4t*sQfab5A)lNY|xM2U(ybsQc{#ZOY95vIh)_wKT3;G~3Hp4WNMQuwI_+YZWb-pY7DSn#bYH-6Z;K z$zrS?xqorWfE2_Kkrq`HILsGt3beGj#GUeM6iCM&R*t53-0nfp2Ni-p_A=}HFJUns z9o1U4l@7%S5WdS<7Kfg9|L7lR+OYOyPCt#T@QBi*-M#Nu@~ z{Ia$1YnLJW9+%u|>g8`LRpRNt1yYXV(nQ`kO+5{@CT=1D(okH;^ z;&N%s$%9*CjIEZzNnQ%DCRbSeZVuhi9Qh-HXaUwQC$?$>=ilpBm5v%qo1AXW zCqyO2i1?+4nc{Pdd?W;zx^True)F z)HHpnrK%bxMnwx+B%Yo!Osoz_xxs4u= zF4bgHTB{dez&N02vZS{_oL3$Bx3p(ZaMFc;-Sm3V8jHu*$!_mu^2 zwG<8b2CA%#Km3s*5tzFYlw;{I&C$)o=J6PFcX1&80E&OiQ!%{DR#u+>an=eC{)qzY z1rl>1IQN@oSyzSbmnq`~80sn}EH{JQ=K1ZP3N9gLB$UHES3K9DgTo0=+o0;2lPOHLfosO8ZY{V(HCLxgiz zplU8Y9qkgU7)WZQGD1;h(q~?VME%Hp*eD7=YcVf`SA|wEWgmDdH6i$ZOdE3%Z$oeZ#ggm~abe zAzxhZTTz1e^kFw2i^gQGC4UN`TcYBnBXf>K9;uzMer2%Q*-Wn2Bq719{HD%}^NW5N zwFm~hcTu-fGR!PmS`x<^>4-fOhApK3<-D(h(iTX+FWj*{bt>gk*2R|jPc-dp9DL1hG#-Ea3RvR1x=Ju$3o;>oz6*c5K0KB` z-fktFAq!2~V_1Y5s)e6~0}CRD>I50rB(LrqN^FOO;?l{pmwERbvIt;Du1`PLwV>+H z0%DPd3zd@h`j=PG1O$KDJuQy;GW@STPpoxj;nsIEihidLWjzgMNyR-E3zQn-z^sAJ z^|G$r{xED7-E^$s+q@n6m>B#rf3bk6d(ooVq}}5FS>18Q6Auuqry=3ZI_(pym z*;mF4@pJdjUAKnWgys@6>pO!m;YVgV_eyHIqPHEdW7c4Hg0rqKZb!6c2N=T8t@9eW z+|YLtjuj-HBREml{PLd^^922im=RuMvLU&wy=M?s4%fi{w~l=50)~VCH=+#tE?Jps zxd_Bfh3ES_;gqllOiz{W1-AZoy2NBj6N#7#-v?v>l^<<=`8&W&;YtBVHDjX>Tcz0! z4grhRAgZHF{kNbT5}y9-BBdTlAg7E@oD)-NNdDus&F_5?)AiKd@qT-=+kIK1ScQUd z=lxE&LP3}8OsP)Oe${b$dfIz$(lfAvJ8s5mUulX*@6zkgmcvWts(3&5?O-Uag-EN* zW+`6@)WnkVcb=(ri1iqdw>1Qi@SnazEntE*rXy2wrqrN)Yz*u$Qc@a_bQp0E|GmX; zE=z*BtkHmt5E7Vwsg<5li$-a3Q6(h}P}k+6+AAla*6d#C+9zIthuU2XJf46nJT@<~ zW0_Jmsq9dchJxukh*9N?8csvn&m)=AjGJErg_o%k7`n&=^ZL4W!RmLD92QP5S8B1r zm7=mRaY#e4ps}e)M*N!kt#u$iR)0(r)pzU>Vm@}f%=FviiV$qiOI_gTo=sg3CZ&6C zT5hVIVi&n!dW~8HLKT-t3!9NZ3)c;mOf{)goPJwrLh|=Fuuwx7^RJW2Fd094lX8KC zAme~4>RrQ1$gWgiF?G!^*PgaNiGaw=Y+Ek$(V{UTmr^z(V=6LOTa8ewN52X}!c=AE zO{DFUS*HkN5B0VRT0dBNH30jK-3}2Qm76h+7+J702KTh&EWcR#cEd`NgXd_^Lnd2P zs}Su|r4fx%t&Sgf5w6a?!~1>U`Wl0Qkr&Yw(zM+E0Bma|AG><5Hz|c6fkw+N%bD~N zj4vZ0?ctUgo+{Mrw)EBM3$u%)WSe~LC~#RYyiYKuKn(Iu^Geo}6pGqkW#m@?ymTw- zTT!mUTQ?JLRX%u(^(9nl+HW8UsI!^Uf8d2P-)k3xrg6UOguH}v1%-6;jUZk*tt9Ttul+-f{GGrtltM;*AB9L@%F>t6T;h8ip&VFoVK6p0 z<4oPg`H$T%9+q@t0dl2ZeQUQP)?)mSJ(aPdLQxHok;UhFy(_98Mj+d^NG2`sKr?4A z+f*Iw3ktF!>`D|}`aGJ7)%TWnR}P;<(nB=)04AeIFnLl7SJ>W05`YUc8bE~x8gaMc zFl;*Gi#e@C>EKjS zhK>WPD@Cd(-6)z4AHuo3mi-+NG#^CEdt=+YG?G4ax(R!+v4Xur8yIGTQgVQ6xk))> z+7Y1d0R*-kpmrgjM>B`=KfG+5tm(OkQpxU}9Fi55Ib03mf=)M0#z`zU?2C(-I0 zcqk^S&SgHD*#P$UO%b|d%-0`bOBU>SE2eTpKOGr(Q`3T5-IT2#cnq09cn+PjmyJIY z*CTJ}D!PapzIHaPv|(ZBw-F#NZw`)xUxt=gE9ii+W!?(_+GxCW;5IwYLB6kG7MwXx zh@^QdbbCYCU({66JGT`U4K=`%j#M={dYs`Kyb@CvxJE{C(88%CB%uyD*ZGY`!(1yi=HRCRT{NU$PA|H1z4Uix7~@n=C_K&4?iroUtd*yar`#YNb8AsU!O)W6l98?^V!4lVvtHp zz-BPlkEPLu6dm=QwXQYt=X%@%AN!IeYiIl)`jYvQo=&f?Yd@k#L5iS`;HmL+E$$5t z|8vIJKQ?Os7siFl=zU+FnN4m@Z=9Q0v-;eOHwAWu=poykc9Y1&sQB+gXD6XhRO{+L z8%MTss_yGCN{XLph7h=GA{4wH9uWj|s{xw_tDeh}vZQE{$TRrd_#e;NVDfHR0Uu3Xxd&1*-aSC~J97sKuSy zhaYlDdL#vEm_#_{EIC>~s=>?D)^ll{_7m!VecU}wIr~g$5Zd~y##Fg>u`StbvK86`!3DkOYZB@JmuOoS6n`&VmzbypI-7D8WQb`9A<$ zfRMLvich{OF?hR_BikM@xE6U-X#`YD@PVvFEa@GcA{Y`Xx@nE)Z>ZrEBz=vUbcg_{ zotc~lNg6s*5Kw-T2!S==J}ij%w+xvkbMU@IItl%LnZ5KOie z5br_%Ez6@Eq=q!gUbWAi>m`2T6<-|h5T2wxvrS;H4BKH=$fm2hGofcrEC4Ang0b|I z=-s~&bWj}oRQBg^THz$&MY$_`c;%OOIvvF3SaV*V{T01QIb_lr>O-3Tq7D3K@pb z2gQCZ^&x(n>UZ?*lmkfmXu_6c4_ka^9Ur=oH{6piuJFjCemtETU6zWRCK*XpDr)L{ zibS&%wn?R^1lB!pmbD?{rC2&Ym2TemKS~N3bdi0 zu9}kZUWJvRN8o*GCC$iCVrBkW`^lFP5s3X#SONb1<>5>CCZxzyI@0YS5oZ2PwWB_M z%kAe@qQ-j~)$-DOC+DwEbIE3;@4l1~maPvi0@>|$rNc?353itlQEwJ{Ts(IU(4wJZ z?Tj34gDV~AG=@DhJ%-!8WcJu@pLxPPeSC=x5ziFCc)?oocL=Ec6Hi6yosmUNck;M6 z;DfXD>2MP9NO@os-$I4mchfP_B7`&w}`uG)Fb5{ zla=6l#ooc3L8e@$w0IX3&N(GB`Kua)B{{(c%A>)qlSdjlHzGlEA^|0EAliIOJK_OV zY0L%6mS}+sJ1B^T*V|$*-?Mq`6ct{BTuq7YG7%~L(U8tC_P-U2u0i>Ot$-vF>gfJo)R%$UG zThTgbsS2by;-YjC=46X;5U_wu){WNVCw1}eE+1G7Zy#CJHH zfJg(Js^r{D9xbbz3|!O5(Yt}`u4>X%Sx9qw_;msAvod`+2(KlC*;-)%FRHu@l}cNz zQ;K>c8BQ{l@G-@2i(U>OtJoDg%5Osl-C;zuTRcduL}6AdPeCBl^tJbZZ(f0o3*YjM zyD9J-8z3IRw{FaIl;nbG+rpn#OqN_n5l5MIuu>~B}++okPHTE7;JviKF4JXED zLGlPyFrkyR^0@!v)|GLsKQODRVKwD@6y3C_cZM!86O;P`(F(U*kG~}w=B)_>dBFh% z8zFknX01CaF1-<88#@6+=Yt>inTwN_~g!UmW-i`Vf}m111_ucnV)0X!)ha`wV^QVX1i za{1l^iFH8{!^1?gOKGox@LADDsR7nawDcC&+(HRWQ)tA>=0;vN(!ahM5E1bcdS0~f zr6{dk)s3u=AuiZNsA!UoKr8>;!2Cy9zz>@)2}f&#d0HN|#aCcM#lrrr)d1{KV*VJySYe*UM98 zh`xt!S-9#IXrAQ0OP`}AB;Bj1E{X~@Ci=X%bg#|gY!M>Hif*;)@NXCG5-Xhh4HP^x z4?Asr%ktX|r!-^eTrZiGWAjk`s^ErIwT%B8E+0yc?|Ex$m&Z|qUKht*W9!z~j}!ZY zU-v7(%u~~2(HMVv-xHMcRs>(t*$uu9e`}U27uBt%hDrc(g&Rqciq4ZKOqEWYf~b1N zc8djiY0<5bPbQJkb(x%sCF2vai|iHg_mUS&YpuS$7mhaNhM!%}d7TX0&^CF6o-8iz zvuZ~>SugvEbiC}!{RQ3gz_yA6+lntW+wxkbt~`1-@{{d)tidBP$Zir24|u9MMYC5C zA{~A*`zMh^E6!0J=iyXnCd7>94c3Q4vM(Llxxa(C>@vv^->HWdjH3L?INSUb^YVuf z7GmMANbCR;{bs~!0vu7=-^c{7amww|-H;j`;YW@*I(6Zr5zIjR~(w%8b-AO1sE|1 z$fX+TuF1U>JCdTUeN)qAI00|lv{RLtyUvK(S?O6Tj!96!7wJ~=NJR4kO)8I zxwqCxBG;ZNbg`Jg#lxmhThlcCddS=_^RqC)Y!1UWBry~<$dAc<Ngp2C`-~)`^fGJ09GZ61^UOyWOr8P9oh%_!~yGD%vp( zdR(I&o(HWwTe(nef;h8EW-8P!CDd_*#UnpqkjLbGPXiwn$sH~3;zjW3OBOPm?#i>B;F?+mU-K!pQj}E!9*}-7kKJV7HxZ6>lY8}S*taG(5!JbNU#~fR5cPaS=#SqY z4Z1Pi@$?mTBwTGX0}B4?U$u$wA5IyVLu1qPZmmeY;smw^dDhri-^dzhn{8O5QQE%V zXf@+uSY~rm+@7TCGxAxyA;0bmFwRTL7Ku$r%i zyw_1ZM1}sCPoemj70mvi5nOHRpz2|#a z?QlP|dy^J-c%-YEzU6#0@&CLKcD8Bs-@uXD3|#1+1cc>TxS&5J^Eo)bKc(GyxCU5A zQbO*FJgam(D5%o}kXjHNHYny24xZWlz4J$#Q60!0L%tJL##+u!{)6WFIFlH}Ds6}+H(L7dQxGpY3nXjH;9JLE;5*3PPou8Nl^a%Rk6_Mx>XI!(IjHFhm z*oufOeeV{CnjGf)@mVQb zi|e&1-IAQBfVjPU-sf8qK|-u6m7y8yyXUp)XjT9T++;j0N`vn`ladts>1K(@wWOaV z#kiqF>Eb!7XnCu?_y;6(>T{N7^LiY>9tUPrcnyjb1WG;K2dsKOTzz*}e}#%tzH(aQ zK9*ykW)P)wCIr0%{W`ROybzP&Ged|uRMx6~2;;FKcWk~DOP&cpMEr!cLrW~PoEB=Z7P zMZ+IH`K3rR)@vK;og|a|eq1*qOz|9eG+jzHI zh6l9>z8h(xKFU!29Yl}nABbd;zlvjoM&=0PV_|1SVo^QhsP|#*1w;SA%h%H|9H|S)s4z@k9BcKZV3`cL9v5c9xZyBu-Y#w5v>dWb z!>khUMA&gPVFKvM_x+Ze|4l*AP^NADm6_zs9&fEk-Xh}2vZv_$@G9(*I;p5RiU3xq z2j0g_7Pp)-Hokt8HS`&Bnah>T`bMCbaQL#~aHa{74)I8Px`#Q>%jMKpjc`Sd*-}N_ zwa}SnmJ4^memkQ}1VF!9JB!`^9~C*pT4pdnaVY_W_MXd{AzL%ERlbM}l^+EXR+vl= z<(rp&2n_>;T1q0EX&fI}HcGp_^KU+ISlV_L8eI%3Or-Tpab~&paQ{3K3N5Q|J}YF- z@SOB(9@v{fK8|iQaTz-JRkUHRZSp1Ce1Di5pMt@#qZb^mS_XD=-r9i5^sTeY(Hkp) z&Rsf$Z59#kdavuL45w#`p_USeP|fJltWQ;yGktAI(9ym}D!kzzB3P&|ZIp5LB0L%{ zX((OKOgXU>@&j##^GQle8sUGv;jm@&MH!p9wTXUlmv3tjCb^gjhSSt#V zwrd{vxs==?0=pT8=sEHP1=`pG=c@UO-%Jsof73gDr_%NoBriMVU>>pX=sxjHq2Sd5HygDzS3W5;nuNA58El?hrzz0N$GdKj z7=z|$N-~TdN#ii>5uPDRQ;J%bnpwdcTQ!7Qulyz9xS0!jouER}!9hNwr>@dQHH$U{~E1}ImF*T93 zcf0eeZda-uwF%CYvcS}1mtO&xn``cieU|8?;(!89DIiN1*m1H9LUf`}5t4W`Y5erX ze>Zw<*#X@6)XsPo4@#Jf9H>%!D5BHihn$cp;LTYQY5bI5h_QkmK5brtA-|L@Tw73L zSo)8Ai*F9~u8x@Pv$W{>Sb;1W44ySlq}&^dlNf6bLQ-L=3N99t^Yyp z&-4Rx1Yw|VDezl>vf6=#=lyT0xTx79fKv?|E{R|U{G4?uCloa#$heEicAhrCQ8zPkfUnc_A5Em|R7LGX(Z)oXnx>l?s|sI?9=JCM&^ z!dl>7qF1e!=e-0EpWl>SPM2DI@BOeD4*}unu+ANq-qM@T-7+3fm|FW6r z6;hA=(G4L?+u}>0WxtE1yltDxjt58Tnzk@t8P*xPSBs&g6Rm$&zMK-|P z-Y>HQR6U>H;?-$P33D`OJaNztVmn}9hJyaxsv{;s?Dd&EGm@+CK$~?BKglu_v11d7 zD(`(M9M2I^5!Sa4_En0z;MWLausAA3Ftj}j2fvoT1nCFqtnl}3h>~2TSP=Bhs9IK< zXA1NQM%;q%p~1T?`MSA6%fwg3GC_276TNhv+dENslYX)zVurgzL6y*6g1FsT^2T3Pby7s zuFk9SxEuk#*P<>|EoZBUsT{wQE8$l)2TPi=g@3_jd8*w^2G6qUwYQ?m0bd-()d|Ut z=u5M!^}$jbQ!c%{hrf^XWqYa=FMXlModC=uEmon6!fm1=;Pd;E_J zI}XKI8DUzkk2HOT^h5a#oFB1-RR|eJ4uAe8=@LYEZFaejef#@n-`vvq*Rq!E>EO8A zWz>xAFEcxtvLvwjV;yV~U5onTm8`ctChTYM+s*p^jqLnm(Int~Q(Z#I;n9FWYszcn zXs@#(Zt?N)LuQWbPvGSz-&EsaX23SoF8kaj|8{T zo9ze?eEmAm?oWEA&OcL-u}=9#*kJAUM0phZON1-+a&f@XJ5m(g z)|$}CTp9Jx;U-T$`P5~m%yUWYu%FZ5Woz9}1~zuu2Y8VPW6!aQ2&APjEh*fS1i4## z@kJ&s*zP~?3W=imCbz~hPa9hqsv*jElNKL($!TIcg1}4t(4ZfdU_Cp#7IdZqq{C{Z zU;=g$oL}K2_Tl)ckTs{1qCUlvWkAo?E+>s{iY&rnr4DidZVwaQw2Vi;iIh zs%$pGJA#zoK%!zNpE@?VC#84tao}KZIcXa1&A|t$(~t1VDAX|i0o`~KHGWG9_l*lX zRLprpq%vWQ0MPHe4v8=-T#e7Rb<`7u^<^y6JZ~mRc9}USKVi`os=*G?yrF!7&0O)) z!}Jgp4^3qrpM<+rrzp8cU)`|RFsLv*uvpPA>N)>XHP^Wp(XMM$PR&n9*kP)8a(U)#TSz z9v{J*`c(~gdvL}-94>H(_Pf-Hoa`>0Sr6yYraSTwkBW;Gvh9VWqYDi#&97!#5BkLH zA(*PSWa`HXaWQaGec!)0+>P};zE1>7RoL+hkEu6J9|fjh6kc&5Zt73p+Gqhe1Xpsi z3cISZsVU_S+z7JcE=^foevu$t#t}=>3@WLcX%kwnIPY7LFCPQl1`O6d60ogkv!slV ze|=6!;?Rt)T^syu7z~jbGsTla<~bL9SBLS z3B3Svp95CiCl7xuA}|X@zJWPR>(@oFCZ3hlUg{JHYC!e$H1RS2_%VKVQE;k)0>I&= z#B*gT{e{9Iq_BidKxT5jQdwhc#_?!-PNqvZFYM?2sv9-X45deGc&@~>eA+%VaKU8V zYm$uz>FRJWe#%~$C>lQVskARVqd#`Dz@j|Jy+)0tHym|Y79`0Nt{3+De1iX84$Q-ls zM#*l8AEW*5Ee5l0zPR~p<7RIO3l4(g;RpOSP(1?u2TIHwX_nUlh+*I$`K@Dtlp}S+ z5KPNFRv%xF$Hh;C50c_%UX}D5&pC=Oh=~*qDtVS@d+`+yQBkqu`iWqF2YbL2k8C`? zdJhzhZ^-y)Z5vg>)XY0q9WcMwNQy`U%{7XYsE8d7PwXj}HU?s{uFdYfb=@eIMVjqypU$=O*<|60|i!a>K7rZ57T<6n=Z%WO9Ik!z4 zc~LDt{XYGzcAryvLjgFbUmgk%-AinxiL~HxLlzhEHn+akoSCe6>7X!-Gi0IMI}~W) z#f@%ep$@0g|H`Xawz}_k6k?&W9A1pw+Tg6)QOEl?>PBWvoU~KBjiip)1*@Dt#f#ubR{dEr=FlNr|Sso(Q$PUa{7D3VJ?GZ0Fh+**+^ zCc=)=P7YIqA%$-Bg$ea`vz$6=*!I2Ioe8n@MZlPGmxyZ`RC`giu#(|&AI0s=m4;C4 zvOlBMGO2dQ;WlDc;tg}*P=`F*h!zRr6iJZ;FVlA&q-(1#+YOq&V?^u+nN?u74!?rs z%?F;-83Cmg^r!r9-s4U;1rcJ0(WV{|c}6&$sWp!<+AmNsI%%!^pm_a7;HnWlU7&5w zZ|`8)l_oK98gzyXfw*3QzFv!3=x6j#BDA9f1xCsxKgNgBl1jfi%JYP&kvYHePX#Z3 zcguYB)uo|iV9lxGP{SpA*xpC3qf@hu3LX1Ya$KQR^nL^yN z@+;~yPCrSF*%>+Q6+TacMY%#1XVm!4aX8)3KHG%S43vj0jMuOeHn*^XL8>oEr6LKv zYB8Pe$<2w?s7ycvFT!SgC%HcBe*A~9$V_^6f+kyLQJvbu=VFDm!F_4|-c1Z{6t>Aa zjz~{lTC*Y^)v6^smzt7F`q_~Q)V_zl_^wxgh|xFA@lR0y4RJeO!V$v$*+A|$ToN=S z5t5RfsX7qEatp@`G#7GXv{uVs@L{M9H|&Igdww#pEjD{S3?KG*O-iOtt>>Ehy#)K^ zXT|ZGF?)U@_=(j=mxrHOU+q*WHSn%rexb8yBz=yJm($U|c{Hs#!y7Ohw|rbbKmTUL zNFz*CgEmB>DfTPoaf-51PEA?Y@x8ucL%zvZ;K^B&g@*fO95U|Y}h#Rq2x`EmGwy6KVMoPq+hnMrC47??#tQlDg#uuS7 zJL)xH>IaRQ`!tV?+Il%}Ser+`_*ELSykk`1851^ROaq=V)Im~-sIBk4aYUQbd@n4S zsbEzD0g%#7*Fu*u)b0j{x`)V3zr_GsXoGy#tb$|)rALsRwA8)heQ-{IT=&f(?%lDr!$V%6pfFQ5^-CK?93a??^>`c<4H;e-XbUr^(lO`eu2-P^V1_-sSE`P zQEMO{!S0)S2^Izh^9H(vE~2h#zoyQR1#ITKI1mtPLoO+~CQ&Ek@<8qL`@$Ae=AW?0 zxzlYQ2NsKDyQZ{Ti3d?rY2)@r@GmzHo3h|9MWDGTZeBhF&_}4DNKOI1T5^jszOJr!)#E;YI z!CL?nCM|N8p#oNawsLxs`_V+b^m(rGq7^dde+cj3y zf>wjHQ?Zr4Rg){j&D%C8pesW^jYSkkUFdH>rSg_X^VLpeniYS4Cgf)0&n=Dp+yUph zsTO@=t6^Jj$n+BO;+)=l58!R%-E4K*XljS1;faWRnU%J%PU#q2%(hcmU5UUwAA1<^ zZ!OtmcwxK7@$t~!h-O8iBIm&a(si1$5k`Ye`hZyv zwCblpn{eCLC?m_9AiaK@GM~7VhDAg} z?QMJu=mRt+y5G@+k9{L_ z{l0;8%#CgJ%kC+$#k;}_TeEYMa<@ijDdbZIn&go8&xUE{YHN6ljoDXGphM^=$10g^eoQd^#d>&vBXt@G}IlI(;Uh8)Fa8~L{_ zghJ;Fr3kk0;yxHjX_P=UEQI993YB-$AEkpM*qC#ZkxXoS2FRtPrQj6fbh?#D2^lwQ zUCNDV#|?D@kz|hjZbZ*&z!7^vtwux+>56v@N1-8XNqT}~t>V}}CXXohY;qUUH4+gz zZQyn|^O3lI#O|DEdgQU$A!^CXoo~Un`1B)RPV^@Nv7>6?XvT@Dk zt@tQMUd6!ptrX5efw(N*{|5mYhrWb^ZJ}@tL!FEiS}A?vbfY1a3S-xAeI_TIwy!U0 z$7#BBWCYuP@%JkMeNS8*7`}GA8wnhxlu)$8K=wkFY6?n5+prBEVc2`af<&C@&=vHO zZ`9&7Q9)4)DaI|U6h?)3{wFtUD-WDg_AkM6iTWR@?^xQxi6tld+Qma!V+!c@u)lI zH9CTCJ6S&g&Q&-X9ECPbR$7zreM~ODT+TI}s9Aj__e29f?&Prio&RX%ddcnhB-@LS zigh#NL$5$J5l}`yLa;A19O3B`<}OyTNpD~AR%A1QTRtX!Kos{TWeq;}X6Qt+wsMm5 zxbSf?PlYqn7yrkUsxujB*y0fD}JL)ujHTQs=HXNZZ^hq%Ar zCfv2ylWcF*Nc*oXrbivH#^V@MO30INaCH6xDZt5JBq{0SkXL&zuE?-u8KIValhbpG zu2sQ(3@qPygT)F9H*vt+Kouir;F0Un@aU+jaM(r=sd@V*h3|*c7R!x?Wn8HJCyn-^ zDq8e(CeC$vTIpWzxpe06%Xor2gh8sZi1zEi5C<)(c3oWv1k0h|wgY|FO2K9*4^mYd+$T+I`ZW zB)u}%5;7NJI<7v%?cmOz_b}wX8F{;9vPKA0eeyoAYLve(d7zdUtB3A&f5#(mj`{MnLDuLWI!HJBNlV zvQH+$g}t|^6hE4pH^4hucaywn=G>JePPE`%?6bH0?lNdshL( zJKa40T$CJ6ERVv+F}lZhF9BIys1GcnQfDz0)Y{t_1g>coh^eA$U#poB{a3G~Dpz+mqd7nrzXL&2EEUN8m;-(?-Ad z2H-{s50(>G=6e0{p{Z-H7WOHrCnN7&DGal$LEIq!QLCY<#+6#d$T@Gqz0 zNx#cqHgYt(IS5IwR;G3Pdo2U~IQFo{C~IuqZr?aB<4hRHU@4uCZMbbeaC-!wFSb`) zmgis3ZL*?84EE@l&<)M-x_$`?Zmd+~Mmfbf{f%sM4T^L;2LVq+)=A=)*0(hrU4 z!DXaj+d7ANa;0E1JMK&0;JsQT3n%oaMah$W@BN6q2`onp#|ymM3f%)>)NRFZGyXvn zs-<1-8t>-Qce{+Ai)vrB((aLNj~7ZR&UZJDSvDJQL`-SsbZ>RXMFi--Hu_$C>Du3G zQnEM7-fUELw_})FI33z+d1LNMk_=R$?HL&{0eXkoed8?^^MroG;PMvwjmdxl+wSVp$E?1xJ$gt!HVdpFSm#c8UAbr@S@tk?&-zz=-$?u zc)peBxOnT%wTLN{8WSw8AQWRzQhLRi`bw7Tt@$8T4bf5gv1;k;!xOUbk^?W8&EX={@CorasS>ppXh(d|1ks#j{k zCy{qt35TzL0e{KEx@&#v4P~N6b!ecwxikhH-jw11d#&%L*|`Yts7daTuohRB(~A+N zI)_w$En5M_lP(ksCc`?m05E9mYH18BFE18 zrHza;>^3}E2rP_BR}gKrx%_TXcxxaW6%(uouk7QP!$<9J9#{doUS+D_wPJvlj%}S3 zboiWDZ9i@_pl9cno#3S6!o@2?Vp^e9-Oqe5Q8S7U^O&d;lz58J!47ZQ zXpR-2s2=5?$1&O5d5qKjR-q>_Utc1EX!>&4<)WGrw1i)fujzj}lhcDT zMSy9+hN?QXc2NTJD^goUq`m%rYjZ0ZN@aWa>W*QOM$*&IEX_SOE{aD+9KNnh72bs( ziQ7#S<$#++wSjmeLO1H0M2XW^zGEU^qhaSVRe(1y@T2chzZikYl?=};6IToXu=VmRswJ$sBpT*Burnj7S_CIVnIAQUdW&0@j|9AVMlY7o@O41>k}du&DvU zkb*ijKnzkypauv+3RBd8SC9fe4L}Q0u%iK}LBep5?^J?@XaKzA&pTf|f42@F4hpJ* z01Ao_e8cn4kq=D(BBKS+LzrLF0*GNO7~=gHNI-(L02Bx?77T<2f+}bMbQI5$a`XgE zY5`zL;D6kI#DIVEp{W#ML86MVcpzlDzq~|rU|s|eFCBmpqQwv3peHJLLXJRyf+G13 zuLcN62VjB_J%0%*9V}d&2nq`P_wSJpoeCPF128~{ZUHAyU%^BoRR61mEeMkyK>hMr z)rgN_v#GF9P#)M&P-Oqgc~;ff8nE)sdp?o>K+l65Id@w!jf9QEZ z+4KM&h|q>G!ihj|8+ehRpqTzc^fLHaC>cmQ7#1D0#`)I<91LKi9)JFWvSIkE8h=0j zy$4uIB=|{}`9D%dBma<&GXO{+9dP_CAUgILN&uo{1Q0`@;@|>|YtkQRaS|+eGc$(2 zHKshHm{Xroc%V^602O5Q`Vs1c9!QNDfCod7^#|nxZa2sv3v2;4{=cm9Okh^b{D1NE zkS5nzd^0Qh|Jr4`=nv@<69BxF7VN(F&jLEi|3KN80Yng}A~P6DQw{2322g^+!8$<9 z%_xK%+Xl9QGC28}{XaIq1$8n5#2|Hdd|26v20Lyj*kAtJhh!~(YEf1_a2|(-puyCLhusI+eKF)8) zr3!ZKRs?7$>i_8Va~Q%v1M+13Tis_?u$+K(SWxCVEIE^^0yGTHi{}r`LOzP73Hg}H z|JMN#K|fgmED#MT*uchFKLW+D0dPQQ$FNwCo`hKF@FrtF0Bj*8u&@2sON>F$Yycq$ z{}`Abngz7a2H=34ld^+VTDyh?P2GdNLX{nW2LXS01~=YAz+glC<1B4pFti?MjvXKb zsj^r&pMoA-&r&Zr0nCtwsBnVq z#XjD>m9HPeEGnAX>57e3m4h1C6{nsf}xWOnz zfj_8F?!O(7^9)56`2$_#2H-<9(Cwzz=>Tgmi2A=8jDRqB{%WAY17@9(`ooGW4MzYH z=lNS#)ibJ0?iqy-T9JdpfOIWn=!|^S?92rB5)eF{JwN3BbL2ydDn8R=gKQMx&_Lq6 z|ESFi7DcG`2LkV4v-^$f+<`U9Qd1rS1@htJTqcc5}U05K?l^KTP{!DldOR?kop zkP9CGvTHdg8Vm(HXc-@X8`5McwZMf^uwJ8Jy;%QI3jCW7T?u;R1BgH>5akEEYrY#C zsM8IO4kW_-cZwb|;+CF+hJr!|n+)qeycnQLegFleg2kp_3wdw_@4%BQ<$s9qK_~nG z4hRvg13rrxSV|NM6cqTP`0tSqodXgT0MJ2*4jnv>q`}pp!2IuJQxFs=@b|J=B>-+; zBWOebKnr2Q^J~O>p4(r8CI9yV768H!1Ta8`1!MzvWGJXB+5a6D+_`Wd)m-qf@Dlvn zF=2vWTewz0z$Bou3OIbw(m%L^XB=MDUz|b}93Dte2!H~)2Y_sM2~rUP;J#?6h69aP z!x4h~z(|OJqlLg)AA-t+0PK+S)#r0J(5(=F`TyC_giRRCeA@*FGMRzH0qF??Fd@Wt z!r)p(XCPooP?hjsnH|sIp;-u+0KAY*bF|f}giTxec2lyQ`fpz(BHLf6WF#sRLE}mjw)+N$Etno~L w&4SlZw_FLX@*eyTzB2xMdpdU1d_pqC1KBLww-06gen{Qv*} diff --git a/ClaperWeb.Gettext.html b/ClaperWeb.Gettext.html index 1699839..d151e29 100644 --- a/ClaperWeb.Gettext.html +++ b/ClaperWeb.Gettext.html @@ -114,15 +114,15 @@ Claper your module gains a set of macros for translations, for example:

import ClaperWeb.Gettext
 
 # Simple translation
-gettext("Here is the string to translate")
+gettext("Here is the string to translate")
 
 # Plural translation
-ngettext("Here is the string to translate",
+ngettext("Here is the string to translate",
          "Here are the strings to translate",
-         3)
+         3)
 
 # Domain-based translation
-dgettext("errors", "Here is the error message to translate")

See the Gettext Docs for detailed usage.

+
dgettext("errors", "Here is the error message to translate")

See the Gettext Docs for detailed usage.

diff --git a/ClaperWeb.LiveHelpers.html b/ClaperWeb.LiveHelpers.html index 8432974..d505abb 100644 --- a/ClaperWeb.LiveHelpers.html +++ b/ClaperWeb.LiveHelpers.html @@ -178,7 +178,7 @@ the URL when the modal is closed.

id: @post.id || :new, action: @live_action, post: @post, - return_to: Routes.post_index_path(@socket, :index) %>

+
return_to: Routes.post_index_path(@socket, :index) %>
diff --git a/SimpleS3Upload.html b/SimpleS3Upload.html index 1f2d011..8b9f7dc 100644 --- a/SimpleS3Upload.html +++ b/SimpleS3Upload.html @@ -184,19 +184,19 @@ before the signed upload expires.

Examples

-
config = %{
+
config = %{
   region: "us-east-1",
-  access_key_id: System.fetch_env!("AWS_ACCESS_KEY_ID"),
-  secret_access_key: System.fetch_env!("AWS_SECRET_ACCESS_KEY")
-}
+  access_key_id: System.fetch_env!("AWS_ACCESS_KEY_ID"),
+  secret_access_key: System.fetch_env!("AWS_SECRET_ACCESS_KEY")
+}
 
-{:ok, fields} =
-  SimpleS3Upload.sign_form_upload(config, "my-bucket",
+{:ok, fields} =
+  SimpleS3Upload.sign_form_upload(config, "my-bucket",
     key: "public/my-file-name",
     content_type: "image/png",
     max_file_size: 10_000,
-    expires_in: :timer.hours(1)
-  )
+
expires_in: :timer.hours(1) + )
diff --git a/configuration.html b/configuration.html index 0e0eee8..38cf2d9 100644 --- a/configuration.html +++ b/configuration.html @@ -112,7 +112,7 @@ Claper Environment file -

All configuration used by the app is stored in the .env file. You can find an example file in .env.sample, but you should copy it to .env and fill it with your own values (described below).

VariableValuesDefaultRequiredDescription
PRESENTATION_STORAGElocal, s3local-Define where the presentation files will be stored
AWS_ACCESS_KEY_ID--only for s3Your AWS Access Key ID
AWS_SECRET_ACCESS_KEY--only for s3Your AWS Secret Access Key
AWS_S3_BUCKET--only for s3The name of the bucket where the presentation files will be stored
AWS_S3_REGION--only for s3The region where the bucket is located
MAIL_TRANSPORTlocal, smtplocal-Define how the emails will be sent
MAIL_FROM-Claper-Email address used to send emails
MAIL_FROM_NAME-noreply@claper.co-Name used to send emails
SMTP_RELAY--SMTP relay server
SMTP_USERNAME--SMTP username
SMTP_PASSWORD--SMTP password
SMTP_PORT-25-SMTP port
SMTP_TLSalways, never, if_availablealways-SMTP TLS
SMTP_AUTHalways, never, if_availablealways-SMTP Auth
SMTP_SSLtrue, falsetrue-SMTP SSL

+

All configuration used by the app is stored in the .env file. You can find an example file in .env.sample, but you should copy it to .env and fill it with your own values (described below).

VariableValuesDefaultRequiredDescription
PRESENTATION_STORAGElocal, s3local-Define where the presentation files will be stored
AWS_ACCESS_KEY_ID--only for s3Your AWS Access Key ID
AWS_SECRET_ACCESS_KEY--only for s3Your AWS Secret Access Key
AWS_S3_BUCKET--only for s3The name of the bucket where the presentation files will be stored
AWS_S3_REGION--only for s3The region where the bucket is located
MAIL_TRANSPORTlocal, smtplocal-Define how the emails will be sent
MAIL_FROM-noreply@claper.co-Email address used to send emails
MAIL_FROM_NAME-Claper-Name used to send emails
SMTP_RELAY--SMTP relay server
SMTP_USERNAME--SMTP username
SMTP_PASSWORD--SMTP password
SMTP_PORT-25-SMTP port
SMTP_TLSalways, never, if_availablealways-SMTP TLS
SMTP_AUTHalways, never, if_availablealways-SMTP Auth
SMTP_SSLtrue, falsetrue-SMTP SSL

production-docker

diff --git a/dist/search_items-75de4f1d24.js b/dist/search_items-a6e5371e50.js similarity index 99% rename from dist/search_items-75de4f1d24.js rename to dist/search_items-a6e5371e50.js index 5dbfb73..bf9a2aa 100644 --- a/dist/search_items-75de4f1d24.js +++ b/dist/search_items-a6e5371e50.js @@ -1 +1 @@ -searchNodes=[{"doc":"Claper keeps the contexts that define your domain and business logic. Contexts are also responsible for managing your data, regardless if it comes from the database, an external API or others.","ref":"Claper.html","title":"Claper","type":"module"},{"doc":"","ref":"Claper.Mailer.html","title":"Claper.Mailer","type":"module"},{"doc":"","ref":"Claper.Mailer.html#deliver!/2","title":"Claper.Mailer.deliver!/2","type":"function"},{"doc":"","ref":"Claper.Mailer.html#deliver/2","title":"Claper.Mailer.deliver/2","type":"function"},{"doc":"","ref":"Claper.Mailer.html#deliver_many/2","title":"Claper.Mailer.deliver_many/2","type":"function"},{"doc":"The Presentations context.","ref":"Claper.Presentations.html","title":"Claper.Presentations","type":"module"},{"doc":"Creates a presentation_files. Examples iex> create_presentation_file ( %{ field : value } ) { :ok , % PresentationFile { } } iex> create_presentation_file ( %{ field : bad_value } ) { :error , % Ecto.Changeset { } }","ref":"Claper.Presentations.html#create_presentation_file/1","title":"Claper.Presentations.create_presentation_file/1","type":"function"},{"doc":"Creates a presentation_state. Examples iex> create_presentation_state ( %{ field : value } ) { :ok , % PresentationState { } } iex> create_presentation_state ( %{ field : bad_value } ) { :error , % Ecto.Changeset { } }","ref":"Claper.Presentations.html#create_presentation_state/1","title":"Claper.Presentations.create_presentation_state/1","type":"function"},{"doc":"Gets a single presentation_files. Raises Ecto.NoResultsError if the Presentation files does not exist. Examples iex> get_presentation_file! ( 123 ) % PresentationFile { } iex> get_presentation_file! ( 456 ) ** (Ecto.NoResultsError)","ref":"Claper.Presentations.html#get_presentation_file!/2","title":"Claper.Presentations.get_presentation_file!/2","type":"function"},{"doc":"","ref":"Claper.Presentations.html#get_presentation_file_by_hash!/1","title":"Claper.Presentations.get_presentation_file_by_hash!/1","type":"function"},{"doc":"","ref":"Claper.Presentations.html#subscribe/1","title":"Claper.Presentations.subscribe/1","type":"function"},{"doc":"Updates a presentation_files. Examples iex> update_presentation_file ( presentation_file , %{ field : new_value } ) { :ok , % PresentationFile { } } iex> update_presentation_file ( presentation_file , %{ field : bad_value } ) { :error , % Ecto.Changeset { } }","ref":"Claper.Presentations.html#update_presentation_file/2","title":"Claper.Presentations.update_presentation_file/2","type":"function"},{"doc":"Updates a presentation_state. Examples iex> update_presentation_state ( presentation_state , %{ field : new_value } ) { :ok , % PresentationState { } } iex> update_presentation_state ( presentation_state , %{ field : bad_value } ) { :error , % Ecto.Changeset { } }","ref":"Claper.Presentations.html#update_presentation_state/2","title":"Claper.Presentations.update_presentation_state/2","type":"function"},{"doc":"","ref":"Claper.Presentations.PresentationFile.html","title":"Claper.Presentations.PresentationFile","type":"module"},{"doc":"","ref":"Claper.Presentations.PresentationState.html","title":"Claper.Presentations.PresentationState","type":"module"},{"doc":"Used for executing DB release tasks when run in production without Mix installed.","ref":"Claper.Release.html","title":"Claper.Release","type":"module"},{"doc":"","ref":"Claper.Release.html#migrate/0","title":"Claper.Release.migrate/0","type":"function"},{"doc":"","ref":"Claper.Release.html#rollback/2","title":"Claper.Release.rollback/2","type":"function"},{"doc":"","ref":"Claper.Repo.html","title":"Claper.Repo","type":"module"},{"doc":"Callback implementation for Ecto.Repo.aggregate/3 .","ref":"Claper.Repo.html#aggregate/3","title":"Claper.Repo.aggregate/3","type":"function"},{"doc":"Callback implementation for Ecto.Repo.aggregate/4 .","ref":"Claper.Repo.html#aggregate/4","title":"Claper.Repo.aggregate/4","type":"function"},{"doc":"Callback implementation for Ecto.Repo.all/2 .","ref":"Claper.Repo.html#all/2","title":"Claper.Repo.all/2","type":"function"},{"doc":"Callback implementation for Ecto.Repo.checked_out?/0 .","ref":"Claper.Repo.html#checked_out?/0","title":"Claper.Repo.checked_out?/0","type":"function"},{"doc":"Callback implementation for Ecto.Repo.checkout/2 .","ref":"Claper.Repo.html#checkout/2","title":"Claper.Repo.checkout/2","type":"function"},{"doc":"","ref":"Claper.Repo.html#child_spec/1","title":"Claper.Repo.child_spec/1","type":"function"},{"doc":"Callback implementation for Ecto.Repo.config/0 .","ref":"Claper.Repo.html#config/0","title":"Claper.Repo.config/0","type":"function"},{"doc":"Callback implementation for Ecto.Repo.default_options/1 .","ref":"Claper.Repo.html#default_options/1","title":"Claper.Repo.default_options/1","type":"function"},{"doc":"Callback implementation for Ecto.Repo.delete!/2 .","ref":"Claper.Repo.html#delete!/2","title":"Claper.Repo.delete!/2","type":"function"},{"doc":"Callback implementation for Ecto.Repo.delete/2 .","ref":"Claper.Repo.html#delete/2","title":"Claper.Repo.delete/2","type":"function"},{"doc":"Callback implementation for Ecto.Repo.delete_all/2 .","ref":"Claper.Repo.html#delete_all/2","title":"Claper.Repo.delete_all/2","type":"function"},{"doc":"Callback implementation for Ecto.Repo.exists?/2 .","ref":"Claper.Repo.html#exists?/2","title":"Claper.Repo.exists?/2","type":"function"},{"doc":"A convenience function for SQL-based repositories that executes an EXPLAIN statement or similar depending on the adapter to obtain statistics for the given query. See Ecto.Adapters.SQL.explain/4 for more information.","ref":"Claper.Repo.html#explain/3","title":"Claper.Repo.explain/3","type":"function"},{"doc":"Callback implementation for Ecto.Repo.get!/3 .","ref":"Claper.Repo.html#get!/3","title":"Claper.Repo.get!/3","type":"function"},{"doc":"Callback implementation for Ecto.Repo.get/3 .","ref":"Claper.Repo.html#get/3","title":"Claper.Repo.get/3","type":"function"},{"doc":"Callback implementation for Ecto.Repo.get_by!/3 .","ref":"Claper.Repo.html#get_by!/3","title":"Claper.Repo.get_by!/3","type":"function"},{"doc":"Callback implementation for Ecto.Repo.get_by/3 .","ref":"Claper.Repo.html#get_by/3","title":"Claper.Repo.get_by/3","type":"function"},{"doc":"Callback implementation for Ecto.Repo.get_dynamic_repo/0 .","ref":"Claper.Repo.html#get_dynamic_repo/0","title":"Claper.Repo.get_dynamic_repo/0","type":"function"},{"doc":"Callback implementation for Ecto.Repo.in_transaction?/0 .","ref":"Claper.Repo.html#in_transaction?/0","title":"Claper.Repo.in_transaction?/0","type":"function"},{"doc":"Callback implementation for Ecto.Repo.init/2 .","ref":"Claper.Repo.html#init/2","title":"Claper.Repo.init/2","type":"function"},{"doc":"Callback implementation for Ecto.Repo.insert!/2 .","ref":"Claper.Repo.html#insert!/2","title":"Claper.Repo.insert!/2","type":"function"},{"doc":"Callback implementation for Ecto.Repo.insert/2 .","ref":"Claper.Repo.html#insert/2","title":"Claper.Repo.insert/2","type":"function"},{"doc":"Callback implementation for Ecto.Repo.insert_all/3 .","ref":"Claper.Repo.html#insert_all/3","title":"Claper.Repo.insert_all/3","type":"function"},{"doc":"Callback implementation for Ecto.Repo.insert_or_update!/2 .","ref":"Claper.Repo.html#insert_or_update!/2","title":"Claper.Repo.insert_or_update!/2","type":"function"},{"doc":"Callback implementation for Ecto.Repo.insert_or_update/2 .","ref":"Claper.Repo.html#insert_or_update/2","title":"Claper.Repo.insert_or_update/2","type":"function"},{"doc":"Callback implementation for Ecto.Repo.load/2 .","ref":"Claper.Repo.html#load/2","title":"Claper.Repo.load/2","type":"function"},{"doc":"Callback implementation for Ecto.Repo.one!/2 .","ref":"Claper.Repo.html#one!/2","title":"Claper.Repo.one!/2","type":"function"},{"doc":"Callback implementation for Ecto.Repo.one/2 .","ref":"Claper.Repo.html#one/2","title":"Claper.Repo.one/2","type":"function"},{"doc":"Callback implementation for Ecto.Repo.preload/3 .","ref":"Claper.Repo.html#preload/3","title":"Claper.Repo.preload/3","type":"function"},{"doc":"Callback implementation for Ecto.Repo.prepare_query/3 .","ref":"Claper.Repo.html#prepare_query/3","title":"Claper.Repo.prepare_query/3","type":"function"},{"doc":"Callback implementation for Ecto.Repo.put_dynamic_repo/1 .","ref":"Claper.Repo.html#put_dynamic_repo/1","title":"Claper.Repo.put_dynamic_repo/1","type":"function"},{"doc":"A convenience function for SQL-based repositories that executes the given query. See Ecto.Adapters.SQL.query!/4 for more information.","ref":"Claper.Repo.html#query!/3","title":"Claper.Repo.query!/3","type":"function"},{"doc":"A convenience function for SQL-based repositories that executes the given query. See Ecto.Adapters.SQL.query/4 for more information.","ref":"Claper.Repo.html#query/3","title":"Claper.Repo.query/3","type":"function"},{"doc":"Callback implementation for Ecto.Repo.reload!/2 .","ref":"Claper.Repo.html#reload!/2","title":"Claper.Repo.reload!/2","type":"function"},{"doc":"Callback implementation for Ecto.Repo.reload/2 .","ref":"Claper.Repo.html#reload/2","title":"Claper.Repo.reload/2","type":"function"},{"doc":"Callback implementation for Ecto.Repo.rollback/1 .","ref":"Claper.Repo.html#rollback/1","title":"Claper.Repo.rollback/1","type":"function"},{"doc":"Callback implementation for Ecto.Repo.start_link/1 .","ref":"Claper.Repo.html#start_link/1","title":"Claper.Repo.start_link/1","type":"function"},{"doc":"Callback implementation for Ecto.Repo.stop/1 .","ref":"Claper.Repo.html#stop/1","title":"Claper.Repo.stop/1","type":"function"},{"doc":"Callback implementation for Ecto.Repo.stream/2 .","ref":"Claper.Repo.html#stream/2","title":"Claper.Repo.stream/2","type":"function"},{"doc":"A convenience function for SQL-based repositories that translates the given query to SQL. See Ecto.Adapters.SQL.to_sql/3 for more information.","ref":"Claper.Repo.html#to_sql/2","title":"Claper.Repo.to_sql/2","type":"function"},{"doc":"Callback implementation for Ecto.Repo.transaction/2 .","ref":"Claper.Repo.html#transaction/2","title":"Claper.Repo.transaction/2","type":"function"},{"doc":"Callback implementation for Ecto.Repo.update!/2 .","ref":"Claper.Repo.html#update!/2","title":"Claper.Repo.update!/2","type":"function"},{"doc":"Callback implementation for Ecto.Repo.update/2 .","ref":"Claper.Repo.html#update/2","title":"Claper.Repo.update/2","type":"function"},{"doc":"Callback implementation for Ecto.Repo.update_all/3 .","ref":"Claper.Repo.html#update_all/3","title":"Claper.Repo.update_all/3","type":"function"},{"doc":"","ref":"Claper.Schema.html","title":"Claper.Schema","type":"module"},{"doc":"The Stats context.","ref":"Claper.Stats.html","title":"Claper.Stats","type":"module"},{"doc":"","ref":"Claper.Stats.html#distinct_poster_count/1","title":"Claper.Stats.distinct_poster_count/1","type":"function"},{"doc":"","ref":"Claper.Stats.html#total_vote_count/1","title":"Claper.Stats.total_vote_count/1","type":"function"},{"doc":"This module is used to convert presentations from PDF or PPT to images. We use a hash to identify the presentation. A new hash is generated when the conversion is finished and the presentation is being uploaded.","ref":"Claper.Tasks.Converter.html","title":"Claper.Tasks.Converter","type":"module"},{"doc":"Remove the presentation files directory","ref":"Claper.Tasks.Converter.html#clear/1","title":"Claper.Tasks.Converter.clear/1","type":"function"},{"doc":"Convert the presentation file to images. We use original hash :erlang.phash2(code-name) where the files are uploaded to send it to another folder with a new hash. This last stored in db.","ref":"Claper.Tasks.Converter.html#convert/5","title":"Claper.Tasks.Converter.convert/5","type":"function"},{"doc":"The entrypoint for defining your web interface, such as controllers, views, channels and so on. This can be used in your application as: use ClaperWeb , :controller use ClaperWeb , :view The definitions below will be executed for every view, controller, etc, so keep them short and clean, focused on imports, uses and aliases. Do NOT define functions inside the quoted expressions below. Instead, define any helper function in modules and import those modules here.","ref":"ClaperWeb.html","title":"ClaperWeb","type":"module"},{"doc":"When used, dispatch to the appropriate controller/view/etc.","ref":"ClaperWeb.html#__using__/1","title":"ClaperWeb.__using__/1","type":"macro"},{"doc":"","ref":"ClaperWeb.html#channel/0","title":"ClaperWeb.channel/0","type":"function"},{"doc":"","ref":"ClaperWeb.html#controller/0","title":"ClaperWeb.controller/0","type":"function"},{"doc":"","ref":"ClaperWeb.html#live_component/0","title":"ClaperWeb.live_component/0","type":"function"},{"doc":"","ref":"ClaperWeb.html#live_view/0","title":"ClaperWeb.live_view/0","type":"function"},{"doc":"","ref":"ClaperWeb.html#router/0","title":"ClaperWeb.router/0","type":"function"},{"doc":"","ref":"ClaperWeb.html#view/0","title":"ClaperWeb.view/0","type":"function"},{"doc":"","ref":"ClaperWeb.html#view_component/0","title":"ClaperWeb.view_component/0","type":"function"},{"doc":"","ref":"ClaperWeb.Component.Alert.html","title":"ClaperWeb.Component.Alert","type":"module"},{"doc":"","ref":"ClaperWeb.Component.Alert.html#error/1","title":"ClaperWeb.Component.Alert.error/1","type":"function"},{"doc":"","ref":"ClaperWeb.Component.Alert.html#info/1","title":"ClaperWeb.Component.Alert.info/1","type":"function"},{"doc":"","ref":"ClaperWeb.Component.Input.html","title":"ClaperWeb.Component.Input","type":"module"},{"doc":"","ref":"ClaperWeb.Component.Input.html#check/1","title":"ClaperWeb.Component.Input.check/1","type":"function"},{"doc":"","ref":"ClaperWeb.Component.Input.html#checked/3","title":"ClaperWeb.Component.Input.checked/3","type":"function"},{"doc":"","ref":"ClaperWeb.Component.Input.html#code/1","title":"ClaperWeb.Component.Input.code/1","type":"function"},{"doc":"","ref":"ClaperWeb.Component.Input.html#date/1","title":"ClaperWeb.Component.Input.date/1","type":"function"},{"doc":"","ref":"ClaperWeb.Component.Input.html#date_range/1","title":"ClaperWeb.Component.Input.date_range/1","type":"function"},{"doc":"","ref":"ClaperWeb.Component.Input.html#email/1","title":"ClaperWeb.Component.Input.email/1","type":"function"},{"doc":"","ref":"ClaperWeb.Component.Input.html#password/1","title":"ClaperWeb.Component.Input.password/1","type":"function"},{"doc":"","ref":"ClaperWeb.Component.Input.html#text/1","title":"ClaperWeb.Component.Input.text/1","type":"function"},{"doc":"","ref":"ClaperWeb.ComponentView.html","title":"ClaperWeb.ComponentView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"ClaperWeb.ComponentView.html#__resource__/0","title":"ClaperWeb.ComponentView.__resource__/0","type":"function"},{"doc":"Renders the given template locally.","ref":"ClaperWeb.ComponentView.html#render/2","title":"ClaperWeb.ComponentView.render/2","type":"function"},{"doc":"Callback invoked when no template is found. By default it raises but can be customized to render a particular template.","ref":"ClaperWeb.ComponentView.html#template_not_found/2","title":"ClaperWeb.ComponentView.template_not_found/2","type":"function"},{"doc":"","ref":"ClaperWeb.Endpoint.html","title":"ClaperWeb.Endpoint","type":"module"},{"doc":"Callback implementation for Phoenix.Endpoint.broadcast!/3 .","ref":"ClaperWeb.Endpoint.html#broadcast!/3","title":"ClaperWeb.Endpoint.broadcast!/3","type":"function"},{"doc":"Callback implementation for Phoenix.Endpoint.broadcast/3 .","ref":"ClaperWeb.Endpoint.html#broadcast/3","title":"ClaperWeb.Endpoint.broadcast/3","type":"function"},{"doc":"Callback implementation for Phoenix.Endpoint.broadcast_from!/4 .","ref":"ClaperWeb.Endpoint.html#broadcast_from!/4","title":"ClaperWeb.Endpoint.broadcast_from!/4","type":"function"},{"doc":"Callback implementation for Phoenix.Endpoint.broadcast_from/4 .","ref":"ClaperWeb.Endpoint.html#broadcast_from/4","title":"ClaperWeb.Endpoint.broadcast_from/4","type":"function"},{"doc":"Callback implementation for Plug.call/2 .","ref":"ClaperWeb.Endpoint.html#call/2","title":"ClaperWeb.Endpoint.call/2","type":"function"},{"doc":"Returns the child specification to start the endpoint under a supervision tree.","ref":"ClaperWeb.Endpoint.html#child_spec/1","title":"ClaperWeb.Endpoint.child_spec/1","type":"function"},{"doc":"Returns the endpoint configuration for key Returns default if the key does not exist.","ref":"ClaperWeb.Endpoint.html#config/2","title":"ClaperWeb.Endpoint.config/2","type":"function"},{"doc":"Reloads the configuration given the application environment changes.","ref":"ClaperWeb.Endpoint.html#config_change/2","title":"ClaperWeb.Endpoint.config_change/2","type":"function"},{"doc":"Returns the host for the given endpoint.","ref":"ClaperWeb.Endpoint.html#host/0","title":"ClaperWeb.Endpoint.host/0","type":"function"},{"doc":"Callback implementation for Plug.init/1 .","ref":"ClaperWeb.Endpoint.html#init/1","title":"ClaperWeb.Endpoint.init/1","type":"function"},{"doc":"Callback implementation for Phoenix.Endpoint.local_broadcast/3 .","ref":"ClaperWeb.Endpoint.html#local_broadcast/3","title":"ClaperWeb.Endpoint.local_broadcast/3","type":"function"},{"doc":"Callback implementation for Phoenix.Endpoint.local_broadcast_from/4 .","ref":"ClaperWeb.Endpoint.html#local_broadcast_from/4","title":"ClaperWeb.Endpoint.local_broadcast_from/4","type":"function"},{"doc":"Generates the path information when routing to this endpoint.","ref":"ClaperWeb.Endpoint.html#path/1","title":"ClaperWeb.Endpoint.path/1","type":"function"},{"doc":"Generates the script name.","ref":"ClaperWeb.Endpoint.html#script_name/0","title":"ClaperWeb.Endpoint.script_name/0","type":"function"},{"doc":"Starts the endpoint supervision tree. Options :log_access_url - if the access url should be logged once the endpoint starts All other options are merged into the endpoint configuration.","ref":"ClaperWeb.Endpoint.html#start_link/1","title":"ClaperWeb.Endpoint.start_link/1","type":"function"},{"doc":"Generates a base64-encoded cryptographic hash (sha512) to a static file in priv/static . Meant to be used for Subresource Integrity with CDNs.","ref":"ClaperWeb.Endpoint.html#static_integrity/1","title":"ClaperWeb.Endpoint.static_integrity/1","type":"function"},{"doc":"Returns a two item tuple with the first item being the static_path and the second item being the static_integrity .","ref":"ClaperWeb.Endpoint.html#static_lookup/1","title":"ClaperWeb.Endpoint.static_lookup/1","type":"function"},{"doc":"Generates a route to a static file in priv/static .","ref":"ClaperWeb.Endpoint.html#static_path/1","title":"ClaperWeb.Endpoint.static_path/1","type":"function"},{"doc":"Generates the static URL without any path information. It uses the configuration under :static_url to generate such. It falls back to :url if :static_url is not set.","ref":"ClaperWeb.Endpoint.html#static_url/0","title":"ClaperWeb.Endpoint.static_url/0","type":"function"},{"doc":"Generates the endpoint base URL but as a URI struct. It uses the configuration under :url to generate such. Useful for manipulating the URL data and passing it to URL helpers.","ref":"ClaperWeb.Endpoint.html#struct_url/0","title":"ClaperWeb.Endpoint.struct_url/0","type":"function"},{"doc":"Callback implementation for Phoenix.Endpoint.subscribe/2 .","ref":"ClaperWeb.Endpoint.html#subscribe/2","title":"ClaperWeb.Endpoint.subscribe/2","type":"function"},{"doc":"Callback implementation for Phoenix.Endpoint.unsubscribe/1 .","ref":"ClaperWeb.Endpoint.html#unsubscribe/1","title":"ClaperWeb.Endpoint.unsubscribe/1","type":"function"},{"doc":"Generates the endpoint base URL without any path information. It uses the configuration under :url to generate such.","ref":"ClaperWeb.Endpoint.html#url/0","title":"ClaperWeb.Endpoint.url/0","type":"function"},{"doc":"Conveniences for translating and building error messages.","ref":"ClaperWeb.ErrorHelpers.html","title":"ClaperWeb.ErrorHelpers","type":"module"},{"doc":"Generates tag for inlined form input errors.","ref":"ClaperWeb.ErrorHelpers.html#error_tag/2","title":"ClaperWeb.ErrorHelpers.error_tag/2","type":"function"},{"doc":"Translates an error message using gettext.","ref":"ClaperWeb.ErrorHelpers.html#translate_error/1","title":"ClaperWeb.ErrorHelpers.translate_error/1","type":"function"},{"doc":"","ref":"ClaperWeb.ErrorView.html","title":"ClaperWeb.ErrorView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"ClaperWeb.ErrorView.html#__resource__/0","title":"ClaperWeb.ErrorView.__resource__/0","type":"function"},{"doc":"Renders the given template locally.","ref":"ClaperWeb.ErrorView.html#render/2","title":"ClaperWeb.ErrorView.render/2","type":"function"},{"doc":"Callback invoked when no template is found. By default it raises but can be customized to render a particular template.","ref":"ClaperWeb.ErrorView.html#template_not_found/2","title":"ClaperWeb.ErrorView.template_not_found/2","type":"function"},{"doc":"A module providing Internationalization with a gettext-based API. By using Gettext , your module gains a set of macros for translations, for example: import ClaperWeb.Gettext # Simple translation gettext ( "Here is the string to translate" ) # Plural translation ngettext ( "Here is the string to translate" , "Here are the strings to translate" , 3 ) # Domain-based translation dgettext ( "errors" , "Here is the error message to translate" ) See the Gettext Docs for detailed usage.","ref":"ClaperWeb.Gettext.html","title":"ClaperWeb.Gettext","type":"module"},{"doc":"Callback implementation for Gettext.Backend.dgettext/3 .","ref":"ClaperWeb.Gettext.html#dgettext/3","title":"ClaperWeb.Gettext.dgettext/3","type":"macro"},{"doc":"Callback implementation for Gettext.Backend.dgettext_noop/2 .","ref":"ClaperWeb.Gettext.html#dgettext_noop/2","title":"ClaperWeb.Gettext.dgettext_noop/2","type":"macro"},{"doc":"Callback implementation for Gettext.Backend.dngettext/5 .","ref":"ClaperWeb.Gettext.html#dngettext/5","title":"ClaperWeb.Gettext.dngettext/5","type":"macro"},{"doc":"Callback implementation for Gettext.Backend.dngettext_noop/3 .","ref":"ClaperWeb.Gettext.html#dngettext_noop/3","title":"ClaperWeb.Gettext.dngettext_noop/3","type":"macro"},{"doc":"Callback implementation for Gettext.Backend.dpgettext/4 .","ref":"ClaperWeb.Gettext.html#dpgettext/4","title":"ClaperWeb.Gettext.dpgettext/4","type":"macro"},{"doc":"","ref":"ClaperWeb.Gettext.html#dpgettext_noop/3","title":"ClaperWeb.Gettext.dpgettext_noop/3","type":"macro"},{"doc":"Callback implementation for Gettext.Backend.dpngettext/6 .","ref":"ClaperWeb.Gettext.html#dpngettext/6","title":"ClaperWeb.Gettext.dpngettext/6","type":"macro"},{"doc":"","ref":"ClaperWeb.Gettext.html#dpngettext_noop/4","title":"ClaperWeb.Gettext.dpngettext_noop/4","type":"macro"},{"doc":"Callback implementation for Gettext.Backend.gettext/2 .","ref":"ClaperWeb.Gettext.html#gettext/2","title":"ClaperWeb.Gettext.gettext/2","type":"macro"},{"doc":"Callback implementation for Gettext.Backend.gettext_comment/1 .","ref":"ClaperWeb.Gettext.html#gettext_comment/1","title":"ClaperWeb.Gettext.gettext_comment/1","type":"macro"},{"doc":"Callback implementation for Gettext.Backend.gettext_noop/1 .","ref":"ClaperWeb.Gettext.html#gettext_noop/1","title":"ClaperWeb.Gettext.gettext_noop/1","type":"macro"},{"doc":"Callback implementation for Gettext.Backend.handle_missing_bindings/2 .","ref":"ClaperWeb.Gettext.html#handle_missing_bindings/2","title":"ClaperWeb.Gettext.handle_missing_bindings/2","type":"function"},{"doc":"Callback implementation for Gettext.Backend.handle_missing_plural_translation/6 .","ref":"ClaperWeb.Gettext.html#handle_missing_plural_translation/6","title":"ClaperWeb.Gettext.handle_missing_plural_translation/6","type":"function"},{"doc":"Callback implementation for Gettext.Backend.handle_missing_translation/4 .","ref":"ClaperWeb.Gettext.html#handle_missing_translation/4","title":"ClaperWeb.Gettext.handle_missing_translation/4","type":"function"},{"doc":"","ref":"ClaperWeb.Gettext.html#lgettext/5","title":"ClaperWeb.Gettext.lgettext/5","type":"function"},{"doc":"","ref":"ClaperWeb.Gettext.html#lngettext/7","title":"ClaperWeb.Gettext.lngettext/7","type":"function"},{"doc":"Callback implementation for Gettext.Backend.ngettext/4 .","ref":"ClaperWeb.Gettext.html#ngettext/4","title":"ClaperWeb.Gettext.ngettext/4","type":"macro"},{"doc":"Callback implementation for Gettext.Backend.ngettext_noop/2 .","ref":"ClaperWeb.Gettext.html#ngettext_noop/2","title":"ClaperWeb.Gettext.ngettext_noop/2","type":"macro"},{"doc":"Callback implementation for Gettext.Backend.pgettext/3 .","ref":"ClaperWeb.Gettext.html#pgettext/3","title":"ClaperWeb.Gettext.pgettext/3","type":"macro"},{"doc":"","ref":"ClaperWeb.Gettext.html#pgettext_noop/2","title":"ClaperWeb.Gettext.pgettext_noop/2","type":"macro"},{"doc":"Callback implementation for Gettext.Backend.pngettext/5 .","ref":"ClaperWeb.Gettext.html#pngettext/5","title":"ClaperWeb.Gettext.pngettext/5","type":"macro"},{"doc":"","ref":"ClaperWeb.Gettext.html#pngettext_noop/3","title":"ClaperWeb.Gettext.pngettext_noop/3","type":"macro"},{"doc":"","ref":"ClaperWeb.LayoutView.html","title":"ClaperWeb.LayoutView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"ClaperWeb.LayoutView.html#__resource__/0","title":"ClaperWeb.LayoutView.__resource__/0","type":"function"},{"doc":"","ref":"ClaperWeb.LayoutView.html#active_class/2","title":"ClaperWeb.LayoutView.active_class/2","type":"function"},{"doc":"","ref":"ClaperWeb.LayoutView.html#active_link/3","title":"ClaperWeb.LayoutView.active_link/3","type":"function"},{"doc":"","ref":"ClaperWeb.LayoutView.html#active_live_class/2","title":"ClaperWeb.LayoutView.active_live_class/2","type":"function"},{"doc":"Renders the given template locally.","ref":"ClaperWeb.LayoutView.html#render/2","title":"ClaperWeb.LayoutView.render/2","type":"function"},{"doc":"Callback invoked when no template is found. By default it raises but can be customized to render a particular template.","ref":"ClaperWeb.LayoutView.html#template_not_found/2","title":"ClaperWeb.LayoutView.template_not_found/2","type":"function"},{"doc":"","ref":"ClaperWeb.LiveHelpers.html","title":"ClaperWeb.LiveHelpers","type":"module"},{"doc":"Renders a component inside the ClaperWeb.ModalComponent component. The rendered modal receives a :return_to option to properly update the URL when the modal is closed. Examples < % = live_modal ClaperWeb.PostLive.FormComponent , id : @post . id || :new , action : @live_action , post : @post , return_to : Routes . post_index_path ( @socket , :index ) % >","ref":"ClaperWeb.LiveHelpers.html#live_modal/2","title":"ClaperWeb.LiveHelpers.live_modal/2","type":"function"},{"doc":"","ref":"ClaperWeb.ModalComponent.html","title":"ClaperWeb.ModalComponent","type":"module"},{"doc":"","ref":"ClaperWeb.ModalComponent.html#hide_modal/1","title":"ClaperWeb.ModalComponent.hide_modal/1","type":"function"},{"doc":"","ref":"ClaperWeb.Notifiers.UserNotifier.html","title":"ClaperWeb.Notifiers.UserNotifier","type":"module"},{"doc":"","ref":"ClaperWeb.Notifiers.UserNotifier.html#magic/2","title":"ClaperWeb.Notifiers.UserNotifier.magic/2","type":"function"},{"doc":"","ref":"ClaperWeb.Notifiers.UserNotifier.html#render_body/3","title":"ClaperWeb.Notifiers.UserNotifier.render_body/3","type":"function"},{"doc":"","ref":"ClaperWeb.Notifiers.UserNotifier.html#update_email/2","title":"ClaperWeb.Notifiers.UserNotifier.update_email/2","type":"function"},{"doc":"","ref":"ClaperWeb.Notifiers.UserNotifier.html#welcome/1","title":"ClaperWeb.Notifiers.UserNotifier.welcome/1","type":"function"},{"doc":"","ref":"ClaperWeb.PageController.html","title":"ClaperWeb.PageController","type":"module"},{"doc":"","ref":"ClaperWeb.PageController.html#index/2","title":"ClaperWeb.PageController.index/2","type":"function"},{"doc":"","ref":"ClaperWeb.PageController.html#privacy/2","title":"ClaperWeb.PageController.privacy/2","type":"function"},{"doc":"","ref":"ClaperWeb.PageController.html#tos/2","title":"ClaperWeb.PageController.tos/2","type":"function"},{"doc":"","ref":"ClaperWeb.PageView.html","title":"ClaperWeb.PageView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"ClaperWeb.PageView.html#__resource__/0","title":"ClaperWeb.PageView.__resource__/0","type":"function"},{"doc":"Renders the given template locally.","ref":"ClaperWeb.PageView.html#render/2","title":"ClaperWeb.PageView.render/2","type":"function"},{"doc":"Callback invoked when no template is found. By default it raises but can be customized to render a particular template.","ref":"ClaperWeb.PageView.html#template_not_found/2","title":"ClaperWeb.PageView.template_not_found/2","type":"function"},{"doc":"","ref":"ClaperWeb.Plugs.Locale.html","title":"ClaperWeb.Plugs.Locale","type":"module"},{"doc":"","ref":"ClaperWeb.Plugs.Locale.html#call/2","title":"ClaperWeb.Plugs.Locale.call/2","type":"function"},{"doc":"","ref":"ClaperWeb.Plugs.Locale.html#extract_accept_language/1","title":"ClaperWeb.Plugs.Locale.extract_accept_language/1","type":"function"},{"doc":"","ref":"ClaperWeb.Plugs.Locale.html#init/1","title":"ClaperWeb.Plugs.Locale.init/1","type":"function"},{"doc":"Provides presence tracking to channels and processes. See the Phoenix.Presence docs for more details.","ref":"ClaperWeb.Presence.html","title":"ClaperWeb.Presence","type":"module"},{"doc":"","ref":"ClaperWeb.Presence.html#child_spec/1","title":"ClaperWeb.Presence.child_spec/1","type":"function"},{"doc":"Callback implementation for Phoenix.Presence.fetch/2 .","ref":"ClaperWeb.Presence.html#fetch/2","title":"ClaperWeb.Presence.fetch/2","type":"function"},{"doc":"","ref":"ClaperWeb.Presence.html#fetchers_pids/0","title":"ClaperWeb.Presence.fetchers_pids/0","type":"function"},{"doc":"Callback implementation for Phoenix.Presence.get_by_key/2 .","ref":"ClaperWeb.Presence.html#get_by_key/2","title":"ClaperWeb.Presence.get_by_key/2","type":"function"},{"doc":"Callback implementation for Phoenix.Presence.list/1 .","ref":"ClaperWeb.Presence.html#list/1","title":"ClaperWeb.Presence.list/1","type":"function"},{"doc":"Callback implementation for Phoenix.Presence.track/3 .","ref":"ClaperWeb.Presence.html#track/3","title":"ClaperWeb.Presence.track/3","type":"function"},{"doc":"Callback implementation for Phoenix.Presence.track/4 .","ref":"ClaperWeb.Presence.html#track/4","title":"ClaperWeb.Presence.track/4","type":"function"},{"doc":"Callback implementation for Phoenix.Presence.untrack/2 .","ref":"ClaperWeb.Presence.html#untrack/2","title":"ClaperWeb.Presence.untrack/2","type":"function"},{"doc":"Callback implementation for Phoenix.Presence.untrack/3 .","ref":"ClaperWeb.Presence.html#untrack/3","title":"ClaperWeb.Presence.untrack/3","type":"function"},{"doc":"Callback implementation for Phoenix.Presence.update/3 .","ref":"ClaperWeb.Presence.html#update/3","title":"ClaperWeb.Presence.update/3","type":"function"},{"doc":"Callback implementation for Phoenix.Presence.update/4 .","ref":"ClaperWeb.Presence.html#update/4","title":"ClaperWeb.Presence.update/4","type":"function"},{"doc":"","ref":"ClaperWeb.Router.html","title":"ClaperWeb.Router","type":"module"},{"doc":"","ref":"ClaperWeb.Router.html#api/2","title":"ClaperWeb.Router.api/2","type":"function"},{"doc":"","ref":"ClaperWeb.Router.html#attendee_registration/2","title":"ClaperWeb.Router.attendee_registration/2","type":"function"},{"doc":"","ref":"ClaperWeb.Router.html#browser/2","title":"ClaperWeb.Router.browser/2","type":"function"},{"doc":"Callback invoked by Plug on every request.","ref":"ClaperWeb.Router.html#call/2","title":"ClaperWeb.Router.call/2","type":"function"},{"doc":"Callback required by Plug that initializes the router for serving web requests.","ref":"ClaperWeb.Router.html#init/1","title":"ClaperWeb.Router.init/1","type":"function"},{"doc":"Module with named helpers generated from ClaperWeb.Router.","ref":"ClaperWeb.Router.Helpers.html","title":"ClaperWeb.Router.Helpers","type":"module"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_index_path/2","title":"ClaperWeb.Router.Helpers.event_index_path/2","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_index_path/3","title":"ClaperWeb.Router.Helpers.event_index_path/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_index_path/4","title":"ClaperWeb.Router.Helpers.event_index_path/4","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_index_url/2","title":"ClaperWeb.Router.Helpers.event_index_url/2","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_index_url/3","title":"ClaperWeb.Router.Helpers.event_index_url/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_index_url/4","title":"ClaperWeb.Router.Helpers.event_index_url/4","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_join_path/2","title":"ClaperWeb.Router.Helpers.event_join_path/2","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_join_path/3","title":"ClaperWeb.Router.Helpers.event_join_path/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_join_url/2","title":"ClaperWeb.Router.Helpers.event_join_url/2","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_join_url/3","title":"ClaperWeb.Router.Helpers.event_join_url/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_manage_path/3","title":"ClaperWeb.Router.Helpers.event_manage_path/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_manage_path/4","title":"ClaperWeb.Router.Helpers.event_manage_path/4","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_manage_path/5","title":"ClaperWeb.Router.Helpers.event_manage_path/5","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_manage_url/3","title":"ClaperWeb.Router.Helpers.event_manage_url/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_manage_url/4","title":"ClaperWeb.Router.Helpers.event_manage_url/4","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_manage_url/5","title":"ClaperWeb.Router.Helpers.event_manage_url/5","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_path/3","title":"ClaperWeb.Router.Helpers.event_path/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_path/4","title":"ClaperWeb.Router.Helpers.event_path/4","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_presenter_path/3","title":"ClaperWeb.Router.Helpers.event_presenter_path/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_presenter_path/4","title":"ClaperWeb.Router.Helpers.event_presenter_path/4","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_presenter_url/3","title":"ClaperWeb.Router.Helpers.event_presenter_url/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_presenter_url/4","title":"ClaperWeb.Router.Helpers.event_presenter_url/4","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_show_path/3","title":"ClaperWeb.Router.Helpers.event_show_path/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_show_path/4","title":"ClaperWeb.Router.Helpers.event_show_path/4","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_show_url/3","title":"ClaperWeb.Router.Helpers.event_show_url/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_show_url/4","title":"ClaperWeb.Router.Helpers.event_show_url/4","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_url/3","title":"ClaperWeb.Router.Helpers.event_url/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_url/4","title":"ClaperWeb.Router.Helpers.event_url/4","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#live_dashboard_path/2","title":"ClaperWeb.Router.Helpers.live_dashboard_path/2","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#live_dashboard_path/3","title":"ClaperWeb.Router.Helpers.live_dashboard_path/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#live_dashboard_path/4","title":"ClaperWeb.Router.Helpers.live_dashboard_path/4","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#live_dashboard_path/5","title":"ClaperWeb.Router.Helpers.live_dashboard_path/5","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#live_dashboard_url/2","title":"ClaperWeb.Router.Helpers.live_dashboard_url/2","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#live_dashboard_url/3","title":"ClaperWeb.Router.Helpers.live_dashboard_url/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#live_dashboard_url/4","title":"ClaperWeb.Router.Helpers.live_dashboard_url/4","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#live_dashboard_url/5","title":"ClaperWeb.Router.Helpers.live_dashboard_url/5","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#page_path/2","title":"ClaperWeb.Router.Helpers.page_path/2","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#page_path/3","title":"ClaperWeb.Router.Helpers.page_path/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#page_url/2","title":"ClaperWeb.Router.Helpers.page_url/2","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#page_url/3","title":"ClaperWeb.Router.Helpers.page_url/3","type":"function"},{"doc":"Generates the path information including any necessary prefix.","ref":"ClaperWeb.Router.Helpers.html#path/2","title":"ClaperWeb.Router.Helpers.path/2","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#stat_index_path/3","title":"ClaperWeb.Router.Helpers.stat_index_path/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#stat_index_path/4","title":"ClaperWeb.Router.Helpers.stat_index_path/4","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#stat_index_url/3","title":"ClaperWeb.Router.Helpers.stat_index_url/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#stat_index_url/4","title":"ClaperWeb.Router.Helpers.stat_index_url/4","type":"function"},{"doc":"Generates an integrity hash to a static asset given its file path.","ref":"ClaperWeb.Router.Helpers.html#static_integrity/2","title":"ClaperWeb.Router.Helpers.static_integrity/2","type":"function"},{"doc":"Generates path to a static asset given its file path.","ref":"ClaperWeb.Router.Helpers.html#static_path/2","title":"ClaperWeb.Router.Helpers.static_path/2","type":"function"},{"doc":"Generates url to a static asset given its file path.","ref":"ClaperWeb.Router.Helpers.html#static_url/2","title":"ClaperWeb.Router.Helpers.static_url/2","type":"function"},{"doc":"Generates the connection/endpoint base URL without any path information.","ref":"ClaperWeb.Router.Helpers.html#url/1","title":"ClaperWeb.Router.Helpers.url/1","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_confirmation_path/2","title":"ClaperWeb.Router.Helpers.user_confirmation_path/2","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_confirmation_path/3","title":"ClaperWeb.Router.Helpers.user_confirmation_path/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_confirmation_path/4","title":"ClaperWeb.Router.Helpers.user_confirmation_path/4","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_confirmation_url/2","title":"ClaperWeb.Router.Helpers.user_confirmation_url/2","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_confirmation_url/3","title":"ClaperWeb.Router.Helpers.user_confirmation_url/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_confirmation_url/4","title":"ClaperWeb.Router.Helpers.user_confirmation_url/4","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_registration_path/2","title":"ClaperWeb.Router.Helpers.user_registration_path/2","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_registration_path/3","title":"ClaperWeb.Router.Helpers.user_registration_path/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_registration_url/2","title":"ClaperWeb.Router.Helpers.user_registration_url/2","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_registration_url/3","title":"ClaperWeb.Router.Helpers.user_registration_url/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_session_path/2","title":"ClaperWeb.Router.Helpers.user_session_path/2","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_session_path/3","title":"ClaperWeb.Router.Helpers.user_session_path/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_session_url/2","title":"ClaperWeb.Router.Helpers.user_session_url/2","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_session_url/3","title":"ClaperWeb.Router.Helpers.user_session_url/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_settings_path/3","title":"ClaperWeb.Router.Helpers.user_settings_path/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_settings_path/4","title":"ClaperWeb.Router.Helpers.user_settings_path/4","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_settings_show_path/2","title":"ClaperWeb.Router.Helpers.user_settings_show_path/2","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_settings_show_path/3","title":"ClaperWeb.Router.Helpers.user_settings_show_path/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_settings_show_url/2","title":"ClaperWeb.Router.Helpers.user_settings_show_url/2","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_settings_show_url/3","title":"ClaperWeb.Router.Helpers.user_settings_show_url/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_settings_url/3","title":"ClaperWeb.Router.Helpers.user_settings_url/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_settings_url/4","title":"ClaperWeb.Router.Helpers.user_settings_url/4","type":"function"},{"doc":"","ref":"ClaperWeb.StatLive.Index.html","title":"ClaperWeb.StatLive.Index","type":"module"},{"doc":"Callback implementation for Phoenix.LiveView.render/1 .","ref":"ClaperWeb.StatLive.Index.html#render/1","title":"ClaperWeb.StatLive.Index.render/1","type":"function"},{"doc":"","ref":"ClaperWeb.Telemetry.html","title":"ClaperWeb.Telemetry","type":"module"},{"doc":"Returns a specification to start this module under a supervisor. See Supervisor .","ref":"ClaperWeb.Telemetry.html#child_spec/1","title":"ClaperWeb.Telemetry.child_spec/1","type":"function"},{"doc":"","ref":"ClaperWeb.Telemetry.html#metrics/0","title":"ClaperWeb.Telemetry.metrics/0","type":"function"},{"doc":"","ref":"ClaperWeb.Telemetry.html#start_link/1","title":"ClaperWeb.Telemetry.start_link/1","type":"function"},{"doc":"","ref":"ClaperWeb.UserNotifierView.html","title":"ClaperWeb.UserNotifierView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"ClaperWeb.UserNotifierView.html#__resource__/0","title":"ClaperWeb.UserNotifierView.__resource__/0","type":"function"},{"doc":"Renders the given template locally.","ref":"ClaperWeb.UserNotifierView.html#render/2","title":"ClaperWeb.UserNotifierView.render/2","type":"function"},{"doc":"Callback invoked when no template is found. By default it raises but can be customized to render a particular template.","ref":"ClaperWeb.UserNotifierView.html#template_not_found/2","title":"ClaperWeb.UserNotifierView.template_not_found/2","type":"function"},{"doc":"Dependency-free S3 Form Upload using HTTP POST sigv4 https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-post-example.html","ref":"SimpleS3Upload.html","title":"SimpleS3Upload","type":"module"},{"doc":"Signs a form upload. The configuration is a map which must contain the following keys: :region - The AWS region, such as "us-east-1" :access_key_id - The AWS access key id :secret_access_key - The AWS secret access key Returns a map of form fields to be used on the client via the JavaScript FormData API. Options :key - The required key of the object to be uploaded. :max_file_size - The required maximum allowed file size in bytes. :content_type - The required MIME type of the file to be uploaded. :expires_in - The required expiration time in milliseconds from now before the signed upload expires. Examples config = %{ region : "us-east-1" , access_key_id : System . fetch_env! ( "AWS_ACCESS_KEY_ID" ) , secret_access_key : System . fetch_env! ( "AWS_SECRET_ACCESS_KEY" ) } { :ok , fields } = SimpleS3Upload . sign_form_upload ( config , "my-bucket" , key : "public/my-file-name" , content_type : "image/png" , max_file_size : 10_000 , expires_in : :timer . hours ( 1 ) )","ref":"SimpleS3Upload.html#sign_form_upload/3","title":"SimpleS3Upload.sign_form_upload/3","type":"function"},{"doc":"","ref":"Utils.FileUpload.html","title":"Utils.FileUpload","type":"module"},{"doc":"","ref":"Utils.FileUpload.html#upload/3","title":"Utils.FileUpload.upload/3","type":"function"},{"doc":"The Accounts context.","ref":"Claper.Accounts.html","title":"Claper.Accounts","type":"module"},{"doc":"Emulates that the email will change without actually changing it in the database. Examples iex> apply_user_email ( user , "valid password" , %{ email : ... } ) { :ok , % User { } } iex> apply_user_email ( user , "invalid password" , %{ email : ... } ) { :error , % Ecto.Changeset { } }","ref":"Claper.Accounts.html#apply_user_email/2","title":"Claper.Accounts.apply_user_email/2","type":"function"},{"doc":"Returns an %Ecto.Changeset{} for changing the user email. Examples iex> change_user_email ( user ) % Ecto.Changeset { data : % User { } }","ref":"Claper.Accounts.html#change_user_email/2","title":"Claper.Accounts.change_user_email/2","type":"function"},{"doc":"Returns an %Ecto.Changeset{} for tracking user changes. Examples iex> change_user_registration ( user ) % Ecto.Changeset { data : % User { } }","ref":"Claper.Accounts.html#change_user_registration/2","title":"Claper.Accounts.change_user_registration/2","type":"function"},{"doc":"","ref":"Claper.Accounts.html#confirm_magic/1","title":"Claper.Accounts.confirm_magic/1","type":"function"},{"doc":"Confirms a user by the given token. If the token matches, the user account is marked as confirmed and the token is deleted.","ref":"Claper.Accounts.html#confirm_user/1","title":"Claper.Accounts.confirm_user/1","type":"function"},{"doc":"Deletes the signed token with the given context.","ref":"Claper.Accounts.html#delete_session_token/1","title":"Claper.Accounts.delete_session_token/1","type":"function"},{"doc":"Delivers the magic link email to the given user. Examples iex> deliver_magic_link ( user , & Routes . user_confirmation_url ( conn , :confirm_magic , &1 ) ) { :ok , %{ to : ... , body : ... } }","ref":"Claper.Accounts.html#deliver_magic_link/2","title":"Claper.Accounts.deliver_magic_link/2","type":"function"},{"doc":"Delivers the update email instructions to the given user. Examples iex> deliver_update_email_instructions ( user , current_email , & Routes . user_update_email_url ( conn , :edit , &1 ) ) { :ok , %{ to : ... , body : ... } }","ref":"Claper.Accounts.html#deliver_update_email_instructions/3","title":"Claper.Accounts.deliver_update_email_instructions/3","type":"function"},{"doc":"Delivers the confirmation email instructions to the given user. Examples iex> deliver_user_confirmation_instructions ( user , & Routes . user_confirmation_url ( conn , :edit , &1 ) ) { :ok , %{ to : ... , body : ... } } iex> deliver_user_confirmation_instructions ( confirmed_user , & Routes . user_confirmation_url ( conn , :edit , &1 ) ) { :error , :already_confirmed }","ref":"Claper.Accounts.html#deliver_user_confirmation_instructions/2","title":"Claper.Accounts.deliver_user_confirmation_instructions/2","type":"function"},{"doc":"Generates a session token.","ref":"Claper.Accounts.html#generate_user_session_token/1","title":"Claper.Accounts.generate_user_session_token/1","type":"function"},{"doc":"Gets a single user. Raises Ecto.NoResultsError if the User does not exist. Examples iex> get_user! ( 123 ) % User { } iex> get_user! ( 456 ) ** (Ecto.NoResultsError)","ref":"Claper.Accounts.html#get_user!/1","title":"Claper.Accounts.get_user!/1","type":"function"},{"doc":"Gets a user by email. Examples iex> get_user_by_email ( "foo@example.com" ) % User { } iex> get_user_by_email ( "unknown@example.com" ) nil","ref":"Claper.Accounts.html#get_user_by_email/1","title":"Claper.Accounts.get_user_by_email/1","type":"function"},{"doc":"Gets the user with the given signed token.","ref":"Claper.Accounts.html#get_user_by_session_token/1","title":"Claper.Accounts.get_user_by_session_token/1","type":"function"},{"doc":"Verify the token for a given user email is valid.","ref":"Claper.Accounts.html#magic_token_valid?/1","title":"Claper.Accounts.magic_token_valid?/1","type":"function"},{"doc":"Registers a user. Examples iex> register_user ( %{ field : value } ) { :ok , % User { } } iex> register_user ( %{ field : bad_value } ) { :error , % Ecto.Changeset { } }","ref":"Claper.Accounts.html#register_user/1","title":"Claper.Accounts.register_user/1","type":"function"},{"doc":"Updates the user email using the given token. If the token matches, the user email is updated and the token is deleted. The confirmed_at date is also updated to the current time.","ref":"Claper.Accounts.html#update_user_email/2","title":"Claper.Accounts.update_user_email/2","type":"function"},{"doc":"","ref":"Claper.Accounts.User.html","title":"Claper.Accounts.User","type":"module"},{"doc":"Confirms the account by setting confirmed_at .","ref":"Claper.Accounts.User.html#confirm_changeset/1","title":"Claper.Accounts.User.confirm_changeset/1","type":"function"},{"doc":"A user changeset for changing the email. It requires the email to change otherwise an error is added.","ref":"Claper.Accounts.User.html#email_changeset/2","title":"Claper.Accounts.User.email_changeset/2","type":"function"},{"doc":"","ref":"Claper.Accounts.User.html#registration_changeset/3","title":"Claper.Accounts.User.registration_changeset/3","type":"function"},{"doc":"","ref":"Claper.Accounts.UserNotifier.html","title":"Claper.Accounts.UserNotifier","type":"module"},{"doc":"Deliver instructions to confirm account.","ref":"Claper.Accounts.UserNotifier.html#deliver_confirmation_instructions/2","title":"Claper.Accounts.UserNotifier.deliver_confirmation_instructions/2","type":"function"},{"doc":"","ref":"Claper.Accounts.UserNotifier.html#deliver_magic_link/2","title":"Claper.Accounts.UserNotifier.deliver_magic_link/2","type":"function"},{"doc":"Deliver instructions to reset a user password.","ref":"Claper.Accounts.UserNotifier.html#deliver_reset_password_instructions/2","title":"Claper.Accounts.UserNotifier.deliver_reset_password_instructions/2","type":"function"},{"doc":"Deliver instructions to update a user email.","ref":"Claper.Accounts.UserNotifier.html#deliver_update_email_instructions/2","title":"Claper.Accounts.UserNotifier.deliver_update_email_instructions/2","type":"function"},{"doc":"","ref":"Claper.Accounts.UserNotifier.html#deliver_welcome/1","title":"Claper.Accounts.UserNotifier.deliver_welcome/1","type":"function"},{"doc":"","ref":"Claper.Accounts.UserToken.html","title":"Claper.Accounts.UserToken","type":"module"},{"doc":"Builds a token and its hash to be delivered to the user's email. The non-hashed token is sent to the user email while the hashed part is stored in the database. The original token cannot be reconstructed, which means anyone with read-only access to the database cannot directly use the token in the application to gain access. Furthermore, if the user changes their email in the system, the tokens sent to the previous email are no longer valid. Users can easily adapt the existing code to provide other types of delivery methods, for example, by phone numbers.","ref":"Claper.Accounts.UserToken.html#build_email_token/2","title":"Claper.Accounts.UserToken.build_email_token/2","type":"function"},{"doc":"","ref":"Claper.Accounts.UserToken.html#build_magic_token/2","title":"Claper.Accounts.UserToken.build_magic_token/2","type":"function"},{"doc":"Generates a token that will be stored in a signed place, such as session or cookie. As they are signed, those tokens do not need to be hashed. The reason why we store session tokens in the database, even though Phoenix already provides a session cookie, is because Phoenix' default session cookies are not persisted, they are simply signed and potentially encrypted. This means they are valid indefinitely, unless you change the signing/encryption salt. Therefore, storing them allows individual user sessions to be expired. The token system can also be extended to store additional data, such as the device used for logging in. You could then use this information to display all valid sessions and devices in the UI and allow users to explicitly expire any session they deem invalid.","ref":"Claper.Accounts.UserToken.html#build_session_token/1","title":"Claper.Accounts.UserToken.build_session_token/1","type":"function"},{"doc":"Returns the token struct for the given token value and context.","ref":"Claper.Accounts.UserToken.html#token_and_context_query/2","title":"Claper.Accounts.UserToken.token_and_context_query/2","type":"function"},{"doc":"Gets all tokens for the given user for the given contexts.","ref":"Claper.Accounts.UserToken.html#user_and_contexts_query/2","title":"Claper.Accounts.UserToken.user_and_contexts_query/2","type":"function"},{"doc":"","ref":"Claper.Accounts.UserToken.html#user_magic_and_contexts_expiry_query/1","title":"Claper.Accounts.UserToken.user_magic_and_contexts_expiry_query/1","type":"function"},{"doc":"","ref":"Claper.Accounts.UserToken.html#user_magic_and_contexts_query/2","title":"Claper.Accounts.UserToken.user_magic_and_contexts_query/2","type":"function"},{"doc":"Checks if the token is valid and returns its underlying lookup query. The query returns the user found by the token, if any. This is used to validate requests to change the user email. It is different from verify_email_token_query/2 precisely because verify_email_token_query/2 validates the email has not changed, which is the starting point by this function. The given token is valid if it matches its hashed counterpart in the database and if it has not expired (after @change_email_validity_in_days). The context must always start with "change:".","ref":"Claper.Accounts.UserToken.html#verify_change_email_token_query/2","title":"Claper.Accounts.UserToken.verify_change_email_token_query/2","type":"function"},{"doc":"Checks if the token is valid and returns its underlying lookup query. The query returns the user found by the token, if any. The given token is valid if it matches its hashed counterpart in the database and the user email has not changed. This function also checks if the token is being used within a certain period, depending on the context. The default contexts supported by this function are either "confirm", for account confirmation emails, and "reset_password", for resetting the password. For verifying requests to change the email, see verify_change_email_token_query/2 .","ref":"Claper.Accounts.UserToken.html#verify_email_token_query/2","title":"Claper.Accounts.UserToken.verify_email_token_query/2","type":"function"},{"doc":"","ref":"Claper.Accounts.UserToken.html#verify_magic_token_query/2","title":"Claper.Accounts.UserToken.verify_magic_token_query/2","type":"function"},{"doc":"Checks if the token is valid and returns its underlying lookup query. The query returns the user found by the token, if any. The token is valid if it matches the value in the database and it has not expired (after @session_validity_in_days).","ref":"Claper.Accounts.UserToken.html#verify_session_token_query/1","title":"Claper.Accounts.UserToken.verify_session_token_query/1","type":"function"},{"doc":"","ref":"ClaperWeb.AttendeeLiveAuth.html","title":"ClaperWeb.AttendeeLiveAuth","type":"module"},{"doc":"","ref":"ClaperWeb.AttendeeLiveAuth.html#on_mount/4","title":"ClaperWeb.AttendeeLiveAuth.on_mount/4","type":"function"},{"doc":"","ref":"ClaperWeb.AttendeeRegistrationView.html","title":"ClaperWeb.AttendeeRegistrationView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"ClaperWeb.AttendeeRegistrationView.html#__resource__/0","title":"ClaperWeb.AttendeeRegistrationView.__resource__/0","type":"function"},{"doc":"Renders the given template locally.","ref":"ClaperWeb.AttendeeRegistrationView.html#render/2","title":"ClaperWeb.AttendeeRegistrationView.render/2","type":"function"},{"doc":"Callback invoked when no template is found. By default it raises but can be customized to render a particular template.","ref":"ClaperWeb.AttendeeRegistrationView.html#template_not_found/2","title":"ClaperWeb.AttendeeRegistrationView.template_not_found/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserAuth.html","title":"ClaperWeb.UserAuth","type":"module"},{"doc":"Authenticates the user by looking into the session and remember me token.","ref":"ClaperWeb.UserAuth.html#fetch_current_user/2","title":"ClaperWeb.UserAuth.fetch_current_user/2","type":"function"},{"doc":"Logs the user in. It renews the session ID and clears the whole session to avoid fixation attacks. See the renew_session function to customize this behaviour. It also sets a :live_socket_id key in the session, so LiveView sessions are identified and automatically disconnected on log out. The line can be safely removed if you are not using LiveView.","ref":"ClaperWeb.UserAuth.html#log_in_user/3","title":"ClaperWeb.UserAuth.log_in_user/3","type":"function"},{"doc":"Logs the user out. It clears all session data for safety. See renew_session.","ref":"ClaperWeb.UserAuth.html#log_out_user/1","title":"ClaperWeb.UserAuth.log_out_user/1","type":"function"},{"doc":"Used for routes that require the user to not be authenticated.","ref":"ClaperWeb.UserAuth.html#redirect_if_user_is_authenticated/2","title":"ClaperWeb.UserAuth.redirect_if_user_is_authenticated/2","type":"function"},{"doc":"Used for routes that require the user to be authenticated. If you want to enforce the user email is confirmed before they use the application at all, here would be a good place.","ref":"ClaperWeb.UserAuth.html#require_authenticated_user/2","title":"ClaperWeb.UserAuth.require_authenticated_user/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserConfirmationController.html","title":"ClaperWeb.UserConfirmationController","type":"module"},{"doc":"","ref":"ClaperWeb.UserConfirmationController.html#confirm_magic/2","title":"ClaperWeb.UserConfirmationController.confirm_magic/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserConfirmationController.html#create/2","title":"ClaperWeb.UserConfirmationController.create/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserConfirmationController.html#edit/2","title":"ClaperWeb.UserConfirmationController.edit/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserConfirmationController.html#new/2","title":"ClaperWeb.UserConfirmationController.new/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserConfirmationController.html#update/2","title":"ClaperWeb.UserConfirmationController.update/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserConfirmationView.html","title":"ClaperWeb.UserConfirmationView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"ClaperWeb.UserConfirmationView.html#__resource__/0","title":"ClaperWeb.UserConfirmationView.__resource__/0","type":"function"},{"doc":"Renders the given template locally.","ref":"ClaperWeb.UserConfirmationView.html#render/2","title":"ClaperWeb.UserConfirmationView.render/2","type":"function"},{"doc":"Callback invoked when no template is found. By default it raises but can be customized to render a particular template.","ref":"ClaperWeb.UserConfirmationView.html#template_not_found/2","title":"ClaperWeb.UserConfirmationView.template_not_found/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserLiveAuth.html","title":"ClaperWeb.UserLiveAuth","type":"module"},{"doc":"","ref":"ClaperWeb.UserLiveAuth.html#on_mount/4","title":"ClaperWeb.UserLiveAuth.on_mount/4","type":"function"},{"doc":"","ref":"ClaperWeb.UserRegistrationController.html","title":"ClaperWeb.UserRegistrationController","type":"module"},{"doc":"","ref":"ClaperWeb.UserRegistrationController.html#confirm/2","title":"ClaperWeb.UserRegistrationController.confirm/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserRegistrationController.html#create/2","title":"ClaperWeb.UserRegistrationController.create/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserRegistrationController.html#new/2","title":"ClaperWeb.UserRegistrationController.new/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserRegistrationView.html","title":"ClaperWeb.UserRegistrationView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"ClaperWeb.UserRegistrationView.html#__resource__/0","title":"ClaperWeb.UserRegistrationView.__resource__/0","type":"function"},{"doc":"Renders the given template locally.","ref":"ClaperWeb.UserRegistrationView.html#render/2","title":"ClaperWeb.UserRegistrationView.render/2","type":"function"},{"doc":"Callback invoked when no template is found. By default it raises but can be customized to render a particular template.","ref":"ClaperWeb.UserRegistrationView.html#template_not_found/2","title":"ClaperWeb.UserRegistrationView.template_not_found/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserResetPasswordView.html","title":"ClaperWeb.UserResetPasswordView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"ClaperWeb.UserResetPasswordView.html#__resource__/0","title":"ClaperWeb.UserResetPasswordView.__resource__/0","type":"function"},{"doc":"Renders the given template locally.","ref":"ClaperWeb.UserResetPasswordView.html#render/2","title":"ClaperWeb.UserResetPasswordView.render/2","type":"function"},{"doc":"Callback invoked when no template is found. By default it raises but can be customized to render a particular template.","ref":"ClaperWeb.UserResetPasswordView.html#template_not_found/2","title":"ClaperWeb.UserResetPasswordView.template_not_found/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserSessionController.html","title":"ClaperWeb.UserSessionController","type":"module"},{"doc":"","ref":"ClaperWeb.UserSessionController.html#create/2","title":"ClaperWeb.UserSessionController.create/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserSessionController.html#delete/2","title":"ClaperWeb.UserSessionController.delete/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserSessionController.html#new/2","title":"ClaperWeb.UserSessionController.new/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserSessionView.html","title":"ClaperWeb.UserSessionView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"ClaperWeb.UserSessionView.html#__resource__/0","title":"ClaperWeb.UserSessionView.__resource__/0","type":"function"},{"doc":"Renders the given template locally.","ref":"ClaperWeb.UserSessionView.html#render/2","title":"ClaperWeb.UserSessionView.render/2","type":"function"},{"doc":"Callback invoked when no template is found. By default it raises but can be customized to render a particular template.","ref":"ClaperWeb.UserSessionView.html#template_not_found/2","title":"ClaperWeb.UserSessionView.template_not_found/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserSettingsController.html","title":"ClaperWeb.UserSettingsController","type":"module"},{"doc":"","ref":"ClaperWeb.UserSettingsController.html#confirm_email/2","title":"ClaperWeb.UserSettingsController.confirm_email/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserSettingsController.html#edit/2","title":"ClaperWeb.UserSettingsController.edit/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserSettingsController.html#update/2","title":"ClaperWeb.UserSettingsController.update/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserSettingsLive.FormComponent.html","title":"ClaperWeb.UserSettingsLive.FormComponent","type":"module"},{"doc":"Callback implementation for Phoenix.LiveComponent.render/1 .","ref":"ClaperWeb.UserSettingsLive.FormComponent.html#render/1","title":"ClaperWeb.UserSettingsLive.FormComponent.render/1","type":"function"},{"doc":"","ref":"ClaperWeb.UserSettingsLive.Show.html","title":"ClaperWeb.UserSettingsLive.Show","type":"module"},{"doc":"Callback implementation for Phoenix.LiveView.render/1 .","ref":"ClaperWeb.UserSettingsLive.Show.html#render/1","title":"ClaperWeb.UserSettingsLive.Show.render/1","type":"function"},{"doc":"","ref":"ClaperWeb.UserSettingsView.html","title":"ClaperWeb.UserSettingsView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"ClaperWeb.UserSettingsView.html#__resource__/0","title":"ClaperWeb.UserSettingsView.__resource__/0","type":"function"},{"doc":"Renders the given template locally.","ref":"ClaperWeb.UserSettingsView.html#render/2","title":"ClaperWeb.UserSettingsView.render/2","type":"function"},{"doc":"Callback invoked when no template is found. By default it raises but can be customized to render a particular template.","ref":"ClaperWeb.UserSettingsView.html#template_not_found/2","title":"ClaperWeb.UserSettingsView.template_not_found/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserView.html","title":"ClaperWeb.UserView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"ClaperWeb.UserView.html#__resource__/0","title":"ClaperWeb.UserView.__resource__/0","type":"function"},{"doc":"Renders the given template locally.","ref":"ClaperWeb.UserView.html#render/2","title":"ClaperWeb.UserView.render/2","type":"function"},{"doc":"Callback invoked when no template is found. By default it raises but can be customized to render a particular template.","ref":"ClaperWeb.UserView.html#template_not_found/2","title":"ClaperWeb.UserView.template_not_found/2","type":"function"},{"doc":"The Events context. An activity leader is a facilitator, a user invited to manage an event.","ref":"Claper.Events.html","title":"Claper.Events","type":"module"},{"doc":"Returns an %Ecto.Changeset{} for tracking facilitator changes. Examples iex> change_activity_leader ( activity_leader ) % Ecto.Changeset { data : % ActivityLeader { } }","ref":"Claper.Events.html#change_activity_leader/2","title":"Claper.Events.change_activity_leader/2","type":"function"},{"doc":"Returns an %Ecto.Changeset{} for tracking event changes. Examples iex> change_event ( event ) % Ecto.Changeset { data : % Event { } }","ref":"Claper.Events.html#change_event/2","title":"Claper.Events.change_event/2","type":"function"},{"doc":"","ref":"Claper.Events.html#count_events_month/1","title":"Claper.Events.count_events_month/1","type":"function"},{"doc":"Creates a event. Examples iex> create_event ( %{ field : value } ) { :ok , % Event { } } iex> create_event ( %{ field : bad_value } ) { :error , % Ecto.Changeset { } }","ref":"Claper.Events.html#create_event/1","title":"Claper.Events.create_event/1","type":"function"},{"doc":"Deletes a event. Examples iex> delete_event ( event ) { :ok , % Event { } } iex> delete_event ( event ) { :error , % Ecto.Changeset { } }","ref":"Claper.Events.html#delete_event/1","title":"Claper.Events.delete_event/1","type":"function"},{"doc":"Gets a single facilitator. Raises Ecto.NoResultsError if the Activity leader does not exist. Examples iex> get_activity_leader! ( 123 ) % ActivityLeader { } iex> get_activity_leader! ( 456 ) ** (Ecto.NoResultsError)","ref":"Claper.Events.html#get_activity_leader!/1","title":"Claper.Events.get_activity_leader!/1","type":"function"},{"doc":"Gets all facilitators for a given event. Examples iex> get_activity_leaders_for_event! ( event ) [ % ActivityLeader { } , ... ]","ref":"Claper.Events.html#get_activity_leaders_for_event/1","title":"Claper.Events.get_activity_leaders_for_event/1","type":"function"},{"doc":"Get a single event with the same code excluding a specific event. Examples iex> get_different_event_with_code ( "Hello" , 123 ) % Event { }","ref":"Claper.Events.html#get_different_event_with_code/2","title":"Claper.Events.get_different_event_with_code/2","type":"function"},{"doc":"Gets a single event. Raises Ecto.NoResultsError if the Event does not exist. Examples iex> get_event! ( "123e4567-e89b-12d3-a456-426614174000" ) % Event { } iex> get_event! ( "123e4567-e89b-12d3-a456-4266141740111" ) ** (Ecto.NoResultsError)","ref":"Claper.Events.html#get_event!/2","title":"Claper.Events.get_event!/2","type":"function"},{"doc":"Gets a single event by code. Raises Ecto.NoResultsError if the Event does not exist. Examples iex> get_event_with_code! ( "Hello" ) % Event { } iex> get_event_with_code! ( "Old event" ) ** (Ecto.NoResultsError)","ref":"Claper.Events.html#get_event_with_code!/2","title":"Claper.Events.get_event_with_code!/2","type":"function"},{"doc":"","ref":"Claper.Events.html#get_event_with_code/2","title":"Claper.Events.get_event_with_code/2","type":"function"},{"doc":"Gets a single managed event. Raises Ecto.NoResultsError if the Event does not exist. Examples iex> get_managed_event! ( user , "123e4567-e89b-12d3-a456-426614174000" ) % Event { } iex> get_managed_event! ( another_user , "123e4567-e89b-12d3-a456-426614174000" ) ** (Ecto.NoResultsError)","ref":"Claper.Events.html#get_managed_event!/3","title":"Claper.Events.get_managed_event!/3","type":"function"},{"doc":"Gets a single user's event. Raises Ecto.NoResultsError if the Event does not exist. Examples iex> get_user_event! ( user , "123e4567-e89b-12d3-a456-426614174000" ) % Event { } iex> get_user_event! ( another_user , "123e4567-e89b-12d3-a456-426614174000" ) ** (Ecto.NoResultsError)","ref":"Claper.Events.html#get_user_event!/3","title":"Claper.Events.get_user_event!/3","type":"function"},{"doc":"Check if a user is a facilitator of a specific event. Examples iex> is_leaded_by ( "email@example.com" , 123 ) true","ref":"Claper.Events.html#is_leaded_by/2","title":"Claper.Events.is_leaded_by/2","type":"function"},{"doc":"Returns the list of events of a given user. Examples iex> list_events ( 123 ) [ % Event { } , ... ]","ref":"Claper.Events.html#list_events/2","title":"Claper.Events.list_events/2","type":"function"},{"doc":"Returns the list of events managed by a given user email. Examples iex> list_managed_events_by ( "email@example.com" ) [ % Event { } , ... ]","ref":"Claper.Events.html#list_managed_events_by/2","title":"Claper.Events.list_managed_events_by/2","type":"function"},{"doc":"Updates a event. Examples iex> update_event ( event , %{ field : new_value } ) { :ok , % Event { } } iex> update_event ( event , %{ field : bad_value } ) { :error , % Ecto.Changeset { } }","ref":"Claper.Events.html#update_event/2","title":"Claper.Events.update_event/2","type":"function"},{"doc":"","ref":"Claper.Events.ActivityLeader.html","title":"Claper.Events.ActivityLeader","type":"module"},{"doc":"","ref":"Claper.Events.Event.html","title":"Claper.Events.Event","type":"module"},{"doc":"","ref":"Claper.Events.Event.html#create_changeset/2","title":"Claper.Events.Event.create_changeset/2","type":"function"},{"doc":"","ref":"Claper.Events.Event.html#downcase_code/1","title":"Claper.Events.Event.downcase_code/1","type":"function"},{"doc":"","ref":"Claper.Events.Event.html#restart_changeset/1","title":"Claper.Events.Event.restart_changeset/1","type":"function"},{"doc":"","ref":"Claper.Events.Event.html#started?/1","title":"Claper.Events.Event.started?/1","type":"function"},{"doc":"","ref":"Claper.Events.Event.html#subscribe/1","title":"Claper.Events.Event.subscribe/1","type":"function"},{"doc":"","ref":"Claper.Events.Event.html#update_changeset/2","title":"Claper.Events.Event.update_changeset/2","type":"function"},{"doc":"","ref":"ClaperWeb.EventController.html","title":"ClaperWeb.EventController","type":"module"},{"doc":"","ref":"ClaperWeb.EventController.html#attendee_identifier/2","title":"ClaperWeb.EventController.attendee_identifier/2","type":"function"},{"doc":"","ref":"ClaperWeb.EventController.html#slide_generate/2","title":"ClaperWeb.EventController.slide_generate/2","type":"function"},{"doc":"","ref":"ClaperWeb.EventLive.EventCardComponent.html","title":"ClaperWeb.EventLive.EventCardComponent","type":"module"},{"doc":"Callback implementation for Phoenix.LiveComponent.render/1 .","ref":"ClaperWeb.EventLive.EventCardComponent.html#render/1","title":"ClaperWeb.EventLive.EventCardComponent.render/1","type":"function"},{"doc":"","ref":"ClaperWeb.EventLive.FormComponent.html","title":"ClaperWeb.EventLive.FormComponent","type":"module"},{"doc":"","ref":"ClaperWeb.EventLive.FormComponent.html#error_to_string/1","title":"ClaperWeb.EventLive.FormComponent.error_to_string/1","type":"function"},{"doc":"Callback implementation for Phoenix.LiveComponent.render/1 .","ref":"ClaperWeb.EventLive.FormComponent.html#render/1","title":"ClaperWeb.EventLive.FormComponent.render/1","type":"function"},{"doc":"","ref":"ClaperWeb.EventLive.Index.html","title":"ClaperWeb.EventLive.Index","type":"module"},{"doc":"Callback implementation for Phoenix.LiveView.render/1 .","ref":"ClaperWeb.EventLive.Index.html#render/1","title":"ClaperWeb.EventLive.Index.render/1","type":"function"},{"doc":"","ref":"ClaperWeb.EventLive.Join.html","title":"ClaperWeb.EventLive.Join","type":"module"},{"doc":"Callback implementation for Phoenix.LiveView.render/1 .","ref":"ClaperWeb.EventLive.Join.html#render/1","title":"ClaperWeb.EventLive.Join.render/1","type":"function"},{"doc":"","ref":"ClaperWeb.EventLive.Manage.html","title":"ClaperWeb.EventLive.Manage","type":"module"},{"doc":"Callback implementation for Phoenix.LiveView.render/1 .","ref":"ClaperWeb.EventLive.Manage.html#render/1","title":"ClaperWeb.EventLive.Manage.render/1","type":"function"},{"doc":"","ref":"ClaperWeb.EventLive.Manage.html#toggle_add_modal/1","title":"ClaperWeb.EventLive.Manage.toggle_add_modal/1","type":"function"},{"doc":"","ref":"ClaperWeb.EventLive.PollComponent.html","title":"ClaperWeb.EventLive.PollComponent","type":"module"},{"doc":"","ref":"ClaperWeb.EventLive.PollComponent.html#toggle_poll/1","title":"ClaperWeb.EventLive.PollComponent.toggle_poll/1","type":"function"},{"doc":"","ref":"ClaperWeb.EventLive.PostComponent.html","title":"ClaperWeb.EventLive.PostComponent","type":"module"},{"doc":"Callback implementation for Phoenix.LiveComponent.render/1 .","ref":"ClaperWeb.EventLive.PostComponent.html#render/1","title":"ClaperWeb.EventLive.PostComponent.render/1","type":"function"},{"doc":"","ref":"ClaperWeb.EventLive.Presenter.html","title":"ClaperWeb.EventLive.Presenter","type":"module"},{"doc":"Callback implementation for Phoenix.LiveView.render/1 .","ref":"ClaperWeb.EventLive.Presenter.html#render/1","title":"ClaperWeb.EventLive.Presenter.render/1","type":"function"},{"doc":"","ref":"ClaperWeb.EventLive.Show.html","title":"ClaperWeb.EventLive.Show","type":"module"},{"doc":"Callback implementation for Phoenix.LiveView.render/1 .","ref":"ClaperWeb.EventLive.Show.html#render/1","title":"ClaperWeb.EventLive.Show.render/1","type":"function"},{"doc":"","ref":"ClaperWeb.EventLive.Show.html#toggle_side_menu/1","title":"ClaperWeb.EventLive.Show.toggle_side_menu/1","type":"function"},{"doc":"","ref":"ClaperWeb.EventView.html","title":"ClaperWeb.EventView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"ClaperWeb.EventView.html#__resource__/0","title":"ClaperWeb.EventView.__resource__/0","type":"function"},{"doc":"Renders the given template locally.","ref":"ClaperWeb.EventView.html#render/2","title":"ClaperWeb.EventView.render/2","type":"function"},{"doc":"Callback invoked when no template is found. By default it raises but can be customized to render a particular template.","ref":"ClaperWeb.EventView.html#template_not_found/2","title":"ClaperWeb.EventView.template_not_found/2","type":"function"},{"doc":"The Polls context.","ref":"Claper.Polls.html","title":"Claper.Polls","type":"module"},{"doc":"Add an empty poll opt to a poll changeset.","ref":"Claper.Polls.html#add_poll_opt/1","title":"Claper.Polls.add_poll_opt/1","type":"function"},{"doc":"Returns an %Ecto.Changeset{} for tracking poll changes. Examples iex> change_poll ( poll ) % Ecto.Changeset { data : % Poll { } }","ref":"Claper.Polls.html#change_poll/2","title":"Claper.Polls.change_poll/2","type":"function"},{"doc":"Creates a poll. Examples iex> create_poll ( %{ field : value } ) { :ok , % Poll { } } iex> create_poll ( %{ field : bad_value } ) { :error , % Ecto.Changeset { } }","ref":"Claper.Polls.html#create_poll/1","title":"Claper.Polls.create_poll/1","type":"function"},{"doc":"Creates a poll_vote. Examples iex> create_poll_vote ( %{ field : value } ) { :ok , % PollVote { } } iex> create_poll_vote ( %{ field : bad_value } ) { :error , % Ecto.Changeset { } }","ref":"Claper.Polls.html#create_poll_vote/1","title":"Claper.Polls.create_poll_vote/1","type":"function"},{"doc":"Deletes a poll. Examples iex> delete_poll ( "123e4567-e89b-12d3-a456-426614174000" , poll ) { :ok , % Poll { } } iex> delete_poll ( "123e4567-e89b-12d3-a456-426614174000" , poll ) { :error , % Ecto.Changeset { } }","ref":"Claper.Polls.html#delete_poll/2","title":"Claper.Polls.delete_poll/2","type":"function"},{"doc":"Gets a single poll and set percentages for each poll options. Raises Ecto.NoResultsError if the Poll does not exist. Examples iex> get_poll! ( 123 ) % Poll { } iex> get_poll! ( 456 ) ** (Ecto.NoResultsError)","ref":"Claper.Polls.html#get_poll!/1","title":"Claper.Polls.get_poll!/1","type":"function"},{"doc":"Gets a single poll for a given position. Examples iex> get_poll! ( 123 , 0 ) % Poll { }","ref":"Claper.Polls.html#get_poll_current_position/2","title":"Claper.Polls.get_poll_current_position/2","type":"function"},{"doc":"Gets a single poll_vote. Examples iex> get_poll_vote! ( 321 , 123 ) % PollVote { }","ref":"Claper.Polls.html#get_poll_vote/2","title":"Claper.Polls.get_poll_vote/2","type":"function"},{"doc":"Returns the list of polls for a given presentation file. Examples iex> list_polls ( 123 ) [ % Poll { } , ... ]","ref":"Claper.Polls.html#list_polls/1","title":"Claper.Polls.list_polls/1","type":"function"},{"doc":"Returns the list of polls for a given presentation file and a given position. Examples iex> list_polls_at_position ( 123 , 0 ) [ % Poll { } , ... ]","ref":"Claper.Polls.html#list_polls_at_position/2","title":"Claper.Polls.list_polls_at_position/2","type":"function"},{"doc":"Remove a poll opt from a poll changeset.","ref":"Claper.Polls.html#remove_poll_opt/2","title":"Claper.Polls.remove_poll_opt/2","type":"function"},{"doc":"","ref":"Claper.Polls.html#set_default/3","title":"Claper.Polls.set_default/3","type":"function"},{"doc":"Calculate percentage of all poll options for a given poll. Examples iex> set_percentages ( poll ) % Poll { }","ref":"Claper.Polls.html#set_percentages/1","title":"Claper.Polls.set_percentages/1","type":"function"},{"doc":"Updates a poll. Examples iex> update_poll ( "123e4567-e89b-12d3-a456-426614174000" , poll , %{ field : new_value } ) { :ok , % Poll { } } iex> update_poll ( "123e4567-e89b-12d3-a456-426614174000" , poll , %{ field : bad_value } ) { :error , % Ecto.Changeset { } }","ref":"Claper.Polls.html#update_poll/3","title":"Claper.Polls.update_poll/3","type":"function"},{"doc":"","ref":"Claper.Polls.html#vote/4","title":"Claper.Polls.vote/4","type":"function"},{"doc":"","ref":"Claper.Polls.Poll.html","title":"Claper.Polls.Poll","type":"module"},{"doc":"","ref":"Claper.Polls.PollOpt.html","title":"Claper.Polls.PollOpt","type":"module"},{"doc":"","ref":"Claper.Polls.PollVote.html","title":"Claper.Polls.PollVote","type":"module"},{"doc":"","ref":"ClaperWeb.PollLive.FormComponent.html","title":"ClaperWeb.PollLive.FormComponent","type":"module"},{"doc":"Callback implementation for Phoenix.LiveComponent.render/1 .","ref":"ClaperWeb.PollLive.FormComponent.html#render/1","title":"ClaperWeb.PollLive.FormComponent.render/1","type":"function"},{"doc":"The Posts context.","ref":"Claper.Posts.html","title":"Claper.Posts","type":"module"},{"doc":"Creates a post. Examples iex> create_post ( event , %{ field : value } ) { :ok , % Post { } } iex> create_post ( event , %{ field : bad_value } ) { :error , % Ecto.Changeset { } }","ref":"Claper.Posts.html#create_post/2","title":"Claper.Posts.create_post/2","type":"function"},{"doc":"Creates a reaction. Examples iex> create_reaction ( %{ field : value } ) { :ok , % Reaction { } } iex> create_reaction ( %{ field : bad_value } ) { :error , % Ecto.Changeset { } }","ref":"Claper.Posts.html#create_reaction/1","title":"Claper.Posts.create_reaction/1","type":"function"},{"doc":"","ref":"Claper.Posts.html#delete_all_posts/3","title":"Claper.Posts.delete_all_posts/3","type":"function"},{"doc":"Deletes a post. Examples iex> delete_post ( post ) { :ok , % Post { } } iex> delete_post ( post ) { :error , % Ecto.Changeset { } }","ref":"Claper.Posts.html#delete_post/1","title":"Claper.Posts.delete_post/1","type":"function"},{"doc":"Deletes a reaction. Examples iex> delete_reaction ( reaction ) { :ok , % Reaction { } } iex> delete_reaction ( reaction ) { :error , % Ecto.Changeset { } }","ref":"Claper.Posts.html#delete_reaction/1","title":"Claper.Posts.delete_reaction/1","type":"function"},{"doc":"Gets a single post. Raises Ecto.NoResultsError if the Post does not exist. Examples iex> get_post! ( "123e4567-e89b-12d3-a456-426614174000" ) % Post { } iex> get_post! ( "123e4567-e89b-12d3-a456-426614174123" ) ** (Ecto.NoResultsError)","ref":"Claper.Posts.html#get_post!/2","title":"Claper.Posts.get_post!/2","type":"function"},{"doc":"Gets a single reaction. Raises Ecto.NoResultsError if the Reaction does not exist. Examples iex> get_reaction! ( 123 ) % Reaction { } iex> get_reaction! ( 456 ) ** (Ecto.NoResultsError)","ref":"Claper.Posts.html#get_reaction!/1","title":"Claper.Posts.get_reaction!/1","type":"function"},{"doc":"Get event posts","ref":"Claper.Posts.html#list_posts/2","title":"Claper.Posts.list_posts/2","type":"function"},{"doc":"","ref":"Claper.Posts.html#reacted_posts/3","title":"Claper.Posts.reacted_posts/3","type":"function"},{"doc":"Updates a post. Examples iex> update_post ( post , %{ field : new_value } ) { :ok , % Post { } } iex> update_post ( post , %{ field : bad_value } ) { :error , % Ecto.Changeset { } }","ref":"Claper.Posts.html#update_post/2","title":"Claper.Posts.update_post/2","type":"function"},{"doc":"","ref":"Claper.Posts.Post.html","title":"Claper.Posts.Post","type":"module"},{"doc":"","ref":"Claper.Posts.Reaction.html","title":"Claper.Posts.Reaction","type":"module"},{"doc":"","ref":"ClaperWeb.PostController.html","title":"ClaperWeb.PostController","type":"module"},{"doc":"","ref":"ClaperWeb.PostController.html#create/2","title":"ClaperWeb.PostController.create/2","type":"function"},{"doc":"","ref":"ClaperWeb.PostController.html#index/2","title":"ClaperWeb.PostController.index/2","type":"function"},{"doc":"","ref":"ClaperWeb.PostView.html","title":"ClaperWeb.PostView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"ClaperWeb.PostView.html#__resource__/0","title":"ClaperWeb.PostView.__resource__/0","type":"function"},{"doc":"Renders the given template locally.","ref":"ClaperWeb.PostView.html#render/2","title":"ClaperWeb.PostView.render/2","type":"function"},{"doc":"Callback invoked when no template is found. By default it raises but can be customized to render a particular template.","ref":"ClaperWeb.PostView.html#template_not_found/2","title":"ClaperWeb.PostView.template_not_found/2","type":"function"},{"doc":"Claper turns your presentations into an interactive, engaging and exciting experience. Claper has a two-sided mission: The first one is to help these people presenting an idea or a message by giving them the opportunity to make their presentation unique and to have real-time feedback from their audience. The second one is to help each participant to take their place, to be an actor in the presentation, in the meeting and to feel important and useful.","ref":"overview.html","title":"Overview","type":"extras"},{"doc":"","ref":"configuration.html","title":"Configuration","type":"extras"},{"doc":"All configuration used by the app is stored in the .env file. You can find an example file in .env.sample , but you should copy it to .env and fill it with your own values (described below). Variable Values Default Required Description PRESENTATION_STORAGE local, s3 local - Define where the presentation files will be stored AWS_ACCESS_KEY_ID - - only for s3 Your AWS Access Key ID AWS_SECRET_ACCESS_KEY - - only for s3 Your AWS Secret Access Key AWS_S3_BUCKET - - only for s3 The name of the bucket where the presentation files will be stored AWS_S3_REGION - - only for s3 The region where the bucket is located MAIL_TRANSPORT local, smtp local - Define how the emails will be sent MAIL_FROM - Claper - Email address used to send emails MAIL_FROM_NAME - noreply@claper.co - Name used to send emails SMTP_RELAY - - ✓ SMTP relay server SMTP_USERNAME - - ✓ SMTP username SMTP_PASSWORD - - ✓ SMTP password SMTP_PORT - 25 - SMTP port SMTP_TLS always, never, if_available always - SMTP TLS SMTP_AUTH always, never, if_available always - SMTP Auth SMTP_SSL true, false true - SMTP SSL","ref":"configuration.html#environment-file","title":"Configuration - Environment file","type":"extras"},{"doc":"You can use all local variables plus the following: Variable Values Default Required Description DATABASE_URL - - ✓ Postgres connection string SECRET_KEY_BASE - - ✓ Generate it with mix phx.gen.secret ENDPOINT_HOST - localhost - Host used to access the app (used for url generation) ENDPOINT_PORT - 80 - Port used to access the app (used for url generation) PORT - 4000 - Port to listen to","ref":"configuration.html#production-docker","title":"Configuration - Production / Docker","type":"extras"},{"doc":"","ref":"installation.html","title":"Installation","type":"extras"},{"doc":"To run Claper on your local environment you need to have: Postgres >= 9 Elixir >= 1.13.2 Erland >= 24 NPM >= 6.14.17 NodeJS >= 14.19.2 Ghostscript >= 9.5.0 (for PDF support) Libreoffice >= 6.4 (for PPT/PPTX support) You can also use Docker to easily run a Postgres instance: docker run -p 5432:5432 -e POSTGRES_PASSWORD=claper -e POSTGRES_USER=claper -e POSTGRES_DB=claper --name claper-db -d postgres:9 Clone the repo git clone https://github.com/ClaperCo/Claper.git Install dependencies mix deps.get Migrate your database mix ecto.migrate Install JS dependencies cd assets && npm i Allow execution of startup file chmod +x ./start.sh Start Phoenix endpoint with ./start.sh Now you can visit localhost:4000 from your browser. If you have configured MAIL to local , you can access to the mailbox at localhost:4000/dev/mailbox .","ref":"installation.html#prerequisites","title":"Installation - Prerequisites","type":"extras"},{"doc":"You can build the app with Docker: docker build -t claper . docker run -p 4000:4000 -d claper","ref":"installation.html#using-docker","title":"Installation - Using Docker","type":"extras"},{"doc":"Claper is passwordless, so you don't have to create an account. Just login with your email, check your mailbox ( localhost:4000/dev/mailbox if you have configured mail to be in local) and click on the link to get connected.","ref":"authentication.html","title":"Authentication","type":"extras"}] \ No newline at end of file +searchNodes=[{"doc":"Claper keeps the contexts that define your domain and business logic. Contexts are also responsible for managing your data, regardless if it comes from the database, an external API or others.","ref":"Claper.html","title":"Claper","type":"module"},{"doc":"","ref":"Claper.Mailer.html","title":"Claper.Mailer","type":"module"},{"doc":"","ref":"Claper.Mailer.html#deliver!/2","title":"Claper.Mailer.deliver!/2","type":"function"},{"doc":"","ref":"Claper.Mailer.html#deliver/2","title":"Claper.Mailer.deliver/2","type":"function"},{"doc":"","ref":"Claper.Mailer.html#deliver_many/2","title":"Claper.Mailer.deliver_many/2","type":"function"},{"doc":"The Presentations context.","ref":"Claper.Presentations.html","title":"Claper.Presentations","type":"module"},{"doc":"Creates a presentation_files. Examples iex> create_presentation_file ( %{ field : value } ) { :ok , % PresentationFile { } } iex> create_presentation_file ( %{ field : bad_value } ) { :error , % Ecto.Changeset { } }","ref":"Claper.Presentations.html#create_presentation_file/1","title":"Claper.Presentations.create_presentation_file/1","type":"function"},{"doc":"Creates a presentation_state. Examples iex> create_presentation_state ( %{ field : value } ) { :ok , % PresentationState { } } iex> create_presentation_state ( %{ field : bad_value } ) { :error , % Ecto.Changeset { } }","ref":"Claper.Presentations.html#create_presentation_state/1","title":"Claper.Presentations.create_presentation_state/1","type":"function"},{"doc":"Gets a single presentation_files. Raises Ecto.NoResultsError if the Presentation files does not exist. Examples iex> get_presentation_file! ( 123 ) % PresentationFile { } iex> get_presentation_file! ( 456 ) ** (Ecto.NoResultsError)","ref":"Claper.Presentations.html#get_presentation_file!/2","title":"Claper.Presentations.get_presentation_file!/2","type":"function"},{"doc":"","ref":"Claper.Presentations.html#get_presentation_file_by_hash!/1","title":"Claper.Presentations.get_presentation_file_by_hash!/1","type":"function"},{"doc":"","ref":"Claper.Presentations.html#subscribe/1","title":"Claper.Presentations.subscribe/1","type":"function"},{"doc":"Updates a presentation_files. Examples iex> update_presentation_file ( presentation_file , %{ field : new_value } ) { :ok , % PresentationFile { } } iex> update_presentation_file ( presentation_file , %{ field : bad_value } ) { :error , % Ecto.Changeset { } }","ref":"Claper.Presentations.html#update_presentation_file/2","title":"Claper.Presentations.update_presentation_file/2","type":"function"},{"doc":"Updates a presentation_state. Examples iex> update_presentation_state ( presentation_state , %{ field : new_value } ) { :ok , % PresentationState { } } iex> update_presentation_state ( presentation_state , %{ field : bad_value } ) { :error , % Ecto.Changeset { } }","ref":"Claper.Presentations.html#update_presentation_state/2","title":"Claper.Presentations.update_presentation_state/2","type":"function"},{"doc":"","ref":"Claper.Presentations.PresentationFile.html","title":"Claper.Presentations.PresentationFile","type":"module"},{"doc":"","ref":"Claper.Presentations.PresentationState.html","title":"Claper.Presentations.PresentationState","type":"module"},{"doc":"Used for executing DB release tasks when run in production without Mix installed.","ref":"Claper.Release.html","title":"Claper.Release","type":"module"},{"doc":"","ref":"Claper.Release.html#migrate/0","title":"Claper.Release.migrate/0","type":"function"},{"doc":"","ref":"Claper.Release.html#rollback/2","title":"Claper.Release.rollback/2","type":"function"},{"doc":"","ref":"Claper.Repo.html","title":"Claper.Repo","type":"module"},{"doc":"Callback implementation for Ecto.Repo.aggregate/3 .","ref":"Claper.Repo.html#aggregate/3","title":"Claper.Repo.aggregate/3","type":"function"},{"doc":"Callback implementation for Ecto.Repo.aggregate/4 .","ref":"Claper.Repo.html#aggregate/4","title":"Claper.Repo.aggregate/4","type":"function"},{"doc":"Callback implementation for Ecto.Repo.all/2 .","ref":"Claper.Repo.html#all/2","title":"Claper.Repo.all/2","type":"function"},{"doc":"Callback implementation for Ecto.Repo.checked_out?/0 .","ref":"Claper.Repo.html#checked_out?/0","title":"Claper.Repo.checked_out?/0","type":"function"},{"doc":"Callback implementation for Ecto.Repo.checkout/2 .","ref":"Claper.Repo.html#checkout/2","title":"Claper.Repo.checkout/2","type":"function"},{"doc":"","ref":"Claper.Repo.html#child_spec/1","title":"Claper.Repo.child_spec/1","type":"function"},{"doc":"Callback implementation for Ecto.Repo.config/0 .","ref":"Claper.Repo.html#config/0","title":"Claper.Repo.config/0","type":"function"},{"doc":"Callback implementation for Ecto.Repo.default_options/1 .","ref":"Claper.Repo.html#default_options/1","title":"Claper.Repo.default_options/1","type":"function"},{"doc":"Callback implementation for Ecto.Repo.delete!/2 .","ref":"Claper.Repo.html#delete!/2","title":"Claper.Repo.delete!/2","type":"function"},{"doc":"Callback implementation for Ecto.Repo.delete/2 .","ref":"Claper.Repo.html#delete/2","title":"Claper.Repo.delete/2","type":"function"},{"doc":"Callback implementation for Ecto.Repo.delete_all/2 .","ref":"Claper.Repo.html#delete_all/2","title":"Claper.Repo.delete_all/2","type":"function"},{"doc":"Callback implementation for Ecto.Repo.exists?/2 .","ref":"Claper.Repo.html#exists?/2","title":"Claper.Repo.exists?/2","type":"function"},{"doc":"A convenience function for SQL-based repositories that executes an EXPLAIN statement or similar depending on the adapter to obtain statistics for the given query. See Ecto.Adapters.SQL.explain/4 for more information.","ref":"Claper.Repo.html#explain/3","title":"Claper.Repo.explain/3","type":"function"},{"doc":"Callback implementation for Ecto.Repo.get!/3 .","ref":"Claper.Repo.html#get!/3","title":"Claper.Repo.get!/3","type":"function"},{"doc":"Callback implementation for Ecto.Repo.get/3 .","ref":"Claper.Repo.html#get/3","title":"Claper.Repo.get/3","type":"function"},{"doc":"Callback implementation for Ecto.Repo.get_by!/3 .","ref":"Claper.Repo.html#get_by!/3","title":"Claper.Repo.get_by!/3","type":"function"},{"doc":"Callback implementation for Ecto.Repo.get_by/3 .","ref":"Claper.Repo.html#get_by/3","title":"Claper.Repo.get_by/3","type":"function"},{"doc":"Callback implementation for Ecto.Repo.get_dynamic_repo/0 .","ref":"Claper.Repo.html#get_dynamic_repo/0","title":"Claper.Repo.get_dynamic_repo/0","type":"function"},{"doc":"Callback implementation for Ecto.Repo.in_transaction?/0 .","ref":"Claper.Repo.html#in_transaction?/0","title":"Claper.Repo.in_transaction?/0","type":"function"},{"doc":"Callback implementation for Ecto.Repo.init/2 .","ref":"Claper.Repo.html#init/2","title":"Claper.Repo.init/2","type":"function"},{"doc":"Callback implementation for Ecto.Repo.insert!/2 .","ref":"Claper.Repo.html#insert!/2","title":"Claper.Repo.insert!/2","type":"function"},{"doc":"Callback implementation for Ecto.Repo.insert/2 .","ref":"Claper.Repo.html#insert/2","title":"Claper.Repo.insert/2","type":"function"},{"doc":"Callback implementation for Ecto.Repo.insert_all/3 .","ref":"Claper.Repo.html#insert_all/3","title":"Claper.Repo.insert_all/3","type":"function"},{"doc":"Callback implementation for Ecto.Repo.insert_or_update!/2 .","ref":"Claper.Repo.html#insert_or_update!/2","title":"Claper.Repo.insert_or_update!/2","type":"function"},{"doc":"Callback implementation for Ecto.Repo.insert_or_update/2 .","ref":"Claper.Repo.html#insert_or_update/2","title":"Claper.Repo.insert_or_update/2","type":"function"},{"doc":"Callback implementation for Ecto.Repo.load/2 .","ref":"Claper.Repo.html#load/2","title":"Claper.Repo.load/2","type":"function"},{"doc":"Callback implementation for Ecto.Repo.one!/2 .","ref":"Claper.Repo.html#one!/2","title":"Claper.Repo.one!/2","type":"function"},{"doc":"Callback implementation for Ecto.Repo.one/2 .","ref":"Claper.Repo.html#one/2","title":"Claper.Repo.one/2","type":"function"},{"doc":"Callback implementation for Ecto.Repo.preload/3 .","ref":"Claper.Repo.html#preload/3","title":"Claper.Repo.preload/3","type":"function"},{"doc":"Callback implementation for Ecto.Repo.prepare_query/3 .","ref":"Claper.Repo.html#prepare_query/3","title":"Claper.Repo.prepare_query/3","type":"function"},{"doc":"Callback implementation for Ecto.Repo.put_dynamic_repo/1 .","ref":"Claper.Repo.html#put_dynamic_repo/1","title":"Claper.Repo.put_dynamic_repo/1","type":"function"},{"doc":"A convenience function for SQL-based repositories that executes the given query. See Ecto.Adapters.SQL.query!/4 for more information.","ref":"Claper.Repo.html#query!/3","title":"Claper.Repo.query!/3","type":"function"},{"doc":"A convenience function for SQL-based repositories that executes the given query. See Ecto.Adapters.SQL.query/4 for more information.","ref":"Claper.Repo.html#query/3","title":"Claper.Repo.query/3","type":"function"},{"doc":"Callback implementation for Ecto.Repo.reload!/2 .","ref":"Claper.Repo.html#reload!/2","title":"Claper.Repo.reload!/2","type":"function"},{"doc":"Callback implementation for Ecto.Repo.reload/2 .","ref":"Claper.Repo.html#reload/2","title":"Claper.Repo.reload/2","type":"function"},{"doc":"Callback implementation for Ecto.Repo.rollback/1 .","ref":"Claper.Repo.html#rollback/1","title":"Claper.Repo.rollback/1","type":"function"},{"doc":"Callback implementation for Ecto.Repo.start_link/1 .","ref":"Claper.Repo.html#start_link/1","title":"Claper.Repo.start_link/1","type":"function"},{"doc":"Callback implementation for Ecto.Repo.stop/1 .","ref":"Claper.Repo.html#stop/1","title":"Claper.Repo.stop/1","type":"function"},{"doc":"Callback implementation for Ecto.Repo.stream/2 .","ref":"Claper.Repo.html#stream/2","title":"Claper.Repo.stream/2","type":"function"},{"doc":"A convenience function for SQL-based repositories that translates the given query to SQL. See Ecto.Adapters.SQL.to_sql/3 for more information.","ref":"Claper.Repo.html#to_sql/2","title":"Claper.Repo.to_sql/2","type":"function"},{"doc":"Callback implementation for Ecto.Repo.transaction/2 .","ref":"Claper.Repo.html#transaction/2","title":"Claper.Repo.transaction/2","type":"function"},{"doc":"Callback implementation for Ecto.Repo.update!/2 .","ref":"Claper.Repo.html#update!/2","title":"Claper.Repo.update!/2","type":"function"},{"doc":"Callback implementation for Ecto.Repo.update/2 .","ref":"Claper.Repo.html#update/2","title":"Claper.Repo.update/2","type":"function"},{"doc":"Callback implementation for Ecto.Repo.update_all/3 .","ref":"Claper.Repo.html#update_all/3","title":"Claper.Repo.update_all/3","type":"function"},{"doc":"","ref":"Claper.Schema.html","title":"Claper.Schema","type":"module"},{"doc":"The Stats context.","ref":"Claper.Stats.html","title":"Claper.Stats","type":"module"},{"doc":"","ref":"Claper.Stats.html#distinct_poster_count/1","title":"Claper.Stats.distinct_poster_count/1","type":"function"},{"doc":"","ref":"Claper.Stats.html#total_vote_count/1","title":"Claper.Stats.total_vote_count/1","type":"function"},{"doc":"This module is used to convert presentations from PDF or PPT to images. We use a hash to identify the presentation. A new hash is generated when the conversion is finished and the presentation is being uploaded.","ref":"Claper.Tasks.Converter.html","title":"Claper.Tasks.Converter","type":"module"},{"doc":"Remove the presentation files directory","ref":"Claper.Tasks.Converter.html#clear/1","title":"Claper.Tasks.Converter.clear/1","type":"function"},{"doc":"Convert the presentation file to images. We use original hash :erlang.phash2(code-name) where the files are uploaded to send it to another folder with a new hash. This last stored in db.","ref":"Claper.Tasks.Converter.html#convert/5","title":"Claper.Tasks.Converter.convert/5","type":"function"},{"doc":"The entrypoint for defining your web interface, such as controllers, views, channels and so on. This can be used in your application as: use ClaperWeb , :controller use ClaperWeb , :view The definitions below will be executed for every view, controller, etc, so keep them short and clean, focused on imports, uses and aliases. Do NOT define functions inside the quoted expressions below. Instead, define any helper function in modules and import those modules here.","ref":"ClaperWeb.html","title":"ClaperWeb","type":"module"},{"doc":"When used, dispatch to the appropriate controller/view/etc.","ref":"ClaperWeb.html#__using__/1","title":"ClaperWeb.__using__/1","type":"macro"},{"doc":"","ref":"ClaperWeb.html#channel/0","title":"ClaperWeb.channel/0","type":"function"},{"doc":"","ref":"ClaperWeb.html#controller/0","title":"ClaperWeb.controller/0","type":"function"},{"doc":"","ref":"ClaperWeb.html#live_component/0","title":"ClaperWeb.live_component/0","type":"function"},{"doc":"","ref":"ClaperWeb.html#live_view/0","title":"ClaperWeb.live_view/0","type":"function"},{"doc":"","ref":"ClaperWeb.html#router/0","title":"ClaperWeb.router/0","type":"function"},{"doc":"","ref":"ClaperWeb.html#view/0","title":"ClaperWeb.view/0","type":"function"},{"doc":"","ref":"ClaperWeb.html#view_component/0","title":"ClaperWeb.view_component/0","type":"function"},{"doc":"","ref":"ClaperWeb.Component.Alert.html","title":"ClaperWeb.Component.Alert","type":"module"},{"doc":"","ref":"ClaperWeb.Component.Alert.html#error/1","title":"ClaperWeb.Component.Alert.error/1","type":"function"},{"doc":"","ref":"ClaperWeb.Component.Alert.html#info/1","title":"ClaperWeb.Component.Alert.info/1","type":"function"},{"doc":"","ref":"ClaperWeb.Component.Input.html","title":"ClaperWeb.Component.Input","type":"module"},{"doc":"","ref":"ClaperWeb.Component.Input.html#check/1","title":"ClaperWeb.Component.Input.check/1","type":"function"},{"doc":"","ref":"ClaperWeb.Component.Input.html#checked/3","title":"ClaperWeb.Component.Input.checked/3","type":"function"},{"doc":"","ref":"ClaperWeb.Component.Input.html#code/1","title":"ClaperWeb.Component.Input.code/1","type":"function"},{"doc":"","ref":"ClaperWeb.Component.Input.html#date/1","title":"ClaperWeb.Component.Input.date/1","type":"function"},{"doc":"","ref":"ClaperWeb.Component.Input.html#date_range/1","title":"ClaperWeb.Component.Input.date_range/1","type":"function"},{"doc":"","ref":"ClaperWeb.Component.Input.html#email/1","title":"ClaperWeb.Component.Input.email/1","type":"function"},{"doc":"","ref":"ClaperWeb.Component.Input.html#password/1","title":"ClaperWeb.Component.Input.password/1","type":"function"},{"doc":"","ref":"ClaperWeb.Component.Input.html#text/1","title":"ClaperWeb.Component.Input.text/1","type":"function"},{"doc":"","ref":"ClaperWeb.ComponentView.html","title":"ClaperWeb.ComponentView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"ClaperWeb.ComponentView.html#__resource__/0","title":"ClaperWeb.ComponentView.__resource__/0","type":"function"},{"doc":"Renders the given template locally.","ref":"ClaperWeb.ComponentView.html#render/2","title":"ClaperWeb.ComponentView.render/2","type":"function"},{"doc":"Callback invoked when no template is found. By default it raises but can be customized to render a particular template.","ref":"ClaperWeb.ComponentView.html#template_not_found/2","title":"ClaperWeb.ComponentView.template_not_found/2","type":"function"},{"doc":"","ref":"ClaperWeb.Endpoint.html","title":"ClaperWeb.Endpoint","type":"module"},{"doc":"Callback implementation for Phoenix.Endpoint.broadcast!/3 .","ref":"ClaperWeb.Endpoint.html#broadcast!/3","title":"ClaperWeb.Endpoint.broadcast!/3","type":"function"},{"doc":"Callback implementation for Phoenix.Endpoint.broadcast/3 .","ref":"ClaperWeb.Endpoint.html#broadcast/3","title":"ClaperWeb.Endpoint.broadcast/3","type":"function"},{"doc":"Callback implementation for Phoenix.Endpoint.broadcast_from!/4 .","ref":"ClaperWeb.Endpoint.html#broadcast_from!/4","title":"ClaperWeb.Endpoint.broadcast_from!/4","type":"function"},{"doc":"Callback implementation for Phoenix.Endpoint.broadcast_from/4 .","ref":"ClaperWeb.Endpoint.html#broadcast_from/4","title":"ClaperWeb.Endpoint.broadcast_from/4","type":"function"},{"doc":"Callback implementation for Plug.call/2 .","ref":"ClaperWeb.Endpoint.html#call/2","title":"ClaperWeb.Endpoint.call/2","type":"function"},{"doc":"Returns the child specification to start the endpoint under a supervision tree.","ref":"ClaperWeb.Endpoint.html#child_spec/1","title":"ClaperWeb.Endpoint.child_spec/1","type":"function"},{"doc":"Returns the endpoint configuration for key Returns default if the key does not exist.","ref":"ClaperWeb.Endpoint.html#config/2","title":"ClaperWeb.Endpoint.config/2","type":"function"},{"doc":"Reloads the configuration given the application environment changes.","ref":"ClaperWeb.Endpoint.html#config_change/2","title":"ClaperWeb.Endpoint.config_change/2","type":"function"},{"doc":"Returns the host for the given endpoint.","ref":"ClaperWeb.Endpoint.html#host/0","title":"ClaperWeb.Endpoint.host/0","type":"function"},{"doc":"Callback implementation for Plug.init/1 .","ref":"ClaperWeb.Endpoint.html#init/1","title":"ClaperWeb.Endpoint.init/1","type":"function"},{"doc":"Callback implementation for Phoenix.Endpoint.local_broadcast/3 .","ref":"ClaperWeb.Endpoint.html#local_broadcast/3","title":"ClaperWeb.Endpoint.local_broadcast/3","type":"function"},{"doc":"Callback implementation for Phoenix.Endpoint.local_broadcast_from/4 .","ref":"ClaperWeb.Endpoint.html#local_broadcast_from/4","title":"ClaperWeb.Endpoint.local_broadcast_from/4","type":"function"},{"doc":"Generates the path information when routing to this endpoint.","ref":"ClaperWeb.Endpoint.html#path/1","title":"ClaperWeb.Endpoint.path/1","type":"function"},{"doc":"Generates the script name.","ref":"ClaperWeb.Endpoint.html#script_name/0","title":"ClaperWeb.Endpoint.script_name/0","type":"function"},{"doc":"Starts the endpoint supervision tree. Options :log_access_url - if the access url should be logged once the endpoint starts All other options are merged into the endpoint configuration.","ref":"ClaperWeb.Endpoint.html#start_link/1","title":"ClaperWeb.Endpoint.start_link/1","type":"function"},{"doc":"Generates a base64-encoded cryptographic hash (sha512) to a static file in priv/static . Meant to be used for Subresource Integrity with CDNs.","ref":"ClaperWeb.Endpoint.html#static_integrity/1","title":"ClaperWeb.Endpoint.static_integrity/1","type":"function"},{"doc":"Returns a two item tuple with the first item being the static_path and the second item being the static_integrity .","ref":"ClaperWeb.Endpoint.html#static_lookup/1","title":"ClaperWeb.Endpoint.static_lookup/1","type":"function"},{"doc":"Generates a route to a static file in priv/static .","ref":"ClaperWeb.Endpoint.html#static_path/1","title":"ClaperWeb.Endpoint.static_path/1","type":"function"},{"doc":"Generates the static URL without any path information. It uses the configuration under :static_url to generate such. It falls back to :url if :static_url is not set.","ref":"ClaperWeb.Endpoint.html#static_url/0","title":"ClaperWeb.Endpoint.static_url/0","type":"function"},{"doc":"Generates the endpoint base URL but as a URI struct. It uses the configuration under :url to generate such. Useful for manipulating the URL data and passing it to URL helpers.","ref":"ClaperWeb.Endpoint.html#struct_url/0","title":"ClaperWeb.Endpoint.struct_url/0","type":"function"},{"doc":"Callback implementation for Phoenix.Endpoint.subscribe/2 .","ref":"ClaperWeb.Endpoint.html#subscribe/2","title":"ClaperWeb.Endpoint.subscribe/2","type":"function"},{"doc":"Callback implementation for Phoenix.Endpoint.unsubscribe/1 .","ref":"ClaperWeb.Endpoint.html#unsubscribe/1","title":"ClaperWeb.Endpoint.unsubscribe/1","type":"function"},{"doc":"Generates the endpoint base URL without any path information. It uses the configuration under :url to generate such.","ref":"ClaperWeb.Endpoint.html#url/0","title":"ClaperWeb.Endpoint.url/0","type":"function"},{"doc":"Conveniences for translating and building error messages.","ref":"ClaperWeb.ErrorHelpers.html","title":"ClaperWeb.ErrorHelpers","type":"module"},{"doc":"Generates tag for inlined form input errors.","ref":"ClaperWeb.ErrorHelpers.html#error_tag/2","title":"ClaperWeb.ErrorHelpers.error_tag/2","type":"function"},{"doc":"Translates an error message using gettext.","ref":"ClaperWeb.ErrorHelpers.html#translate_error/1","title":"ClaperWeb.ErrorHelpers.translate_error/1","type":"function"},{"doc":"","ref":"ClaperWeb.ErrorView.html","title":"ClaperWeb.ErrorView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"ClaperWeb.ErrorView.html#__resource__/0","title":"ClaperWeb.ErrorView.__resource__/0","type":"function"},{"doc":"Renders the given template locally.","ref":"ClaperWeb.ErrorView.html#render/2","title":"ClaperWeb.ErrorView.render/2","type":"function"},{"doc":"Callback invoked when no template is found. By default it raises but can be customized to render a particular template.","ref":"ClaperWeb.ErrorView.html#template_not_found/2","title":"ClaperWeb.ErrorView.template_not_found/2","type":"function"},{"doc":"A module providing Internationalization with a gettext-based API. By using Gettext , your module gains a set of macros for translations, for example: import ClaperWeb.Gettext # Simple translation gettext ( "Here is the string to translate" ) # Plural translation ngettext ( "Here is the string to translate" , "Here are the strings to translate" , 3 ) # Domain-based translation dgettext ( "errors" , "Here is the error message to translate" ) See the Gettext Docs for detailed usage.","ref":"ClaperWeb.Gettext.html","title":"ClaperWeb.Gettext","type":"module"},{"doc":"Callback implementation for Gettext.Backend.dgettext/3 .","ref":"ClaperWeb.Gettext.html#dgettext/3","title":"ClaperWeb.Gettext.dgettext/3","type":"macro"},{"doc":"Callback implementation for Gettext.Backend.dgettext_noop/2 .","ref":"ClaperWeb.Gettext.html#dgettext_noop/2","title":"ClaperWeb.Gettext.dgettext_noop/2","type":"macro"},{"doc":"Callback implementation for Gettext.Backend.dngettext/5 .","ref":"ClaperWeb.Gettext.html#dngettext/5","title":"ClaperWeb.Gettext.dngettext/5","type":"macro"},{"doc":"Callback implementation for Gettext.Backend.dngettext_noop/3 .","ref":"ClaperWeb.Gettext.html#dngettext_noop/3","title":"ClaperWeb.Gettext.dngettext_noop/3","type":"macro"},{"doc":"Callback implementation for Gettext.Backend.dpgettext/4 .","ref":"ClaperWeb.Gettext.html#dpgettext/4","title":"ClaperWeb.Gettext.dpgettext/4","type":"macro"},{"doc":"","ref":"ClaperWeb.Gettext.html#dpgettext_noop/3","title":"ClaperWeb.Gettext.dpgettext_noop/3","type":"macro"},{"doc":"Callback implementation for Gettext.Backend.dpngettext/6 .","ref":"ClaperWeb.Gettext.html#dpngettext/6","title":"ClaperWeb.Gettext.dpngettext/6","type":"macro"},{"doc":"","ref":"ClaperWeb.Gettext.html#dpngettext_noop/4","title":"ClaperWeb.Gettext.dpngettext_noop/4","type":"macro"},{"doc":"Callback implementation for Gettext.Backend.gettext/2 .","ref":"ClaperWeb.Gettext.html#gettext/2","title":"ClaperWeb.Gettext.gettext/2","type":"macro"},{"doc":"Callback implementation for Gettext.Backend.gettext_comment/1 .","ref":"ClaperWeb.Gettext.html#gettext_comment/1","title":"ClaperWeb.Gettext.gettext_comment/1","type":"macro"},{"doc":"Callback implementation for Gettext.Backend.gettext_noop/1 .","ref":"ClaperWeb.Gettext.html#gettext_noop/1","title":"ClaperWeb.Gettext.gettext_noop/1","type":"macro"},{"doc":"Callback implementation for Gettext.Backend.handle_missing_bindings/2 .","ref":"ClaperWeb.Gettext.html#handle_missing_bindings/2","title":"ClaperWeb.Gettext.handle_missing_bindings/2","type":"function"},{"doc":"Callback implementation for Gettext.Backend.handle_missing_plural_translation/6 .","ref":"ClaperWeb.Gettext.html#handle_missing_plural_translation/6","title":"ClaperWeb.Gettext.handle_missing_plural_translation/6","type":"function"},{"doc":"Callback implementation for Gettext.Backend.handle_missing_translation/4 .","ref":"ClaperWeb.Gettext.html#handle_missing_translation/4","title":"ClaperWeb.Gettext.handle_missing_translation/4","type":"function"},{"doc":"","ref":"ClaperWeb.Gettext.html#lgettext/5","title":"ClaperWeb.Gettext.lgettext/5","type":"function"},{"doc":"","ref":"ClaperWeb.Gettext.html#lngettext/7","title":"ClaperWeb.Gettext.lngettext/7","type":"function"},{"doc":"Callback implementation for Gettext.Backend.ngettext/4 .","ref":"ClaperWeb.Gettext.html#ngettext/4","title":"ClaperWeb.Gettext.ngettext/4","type":"macro"},{"doc":"Callback implementation for Gettext.Backend.ngettext_noop/2 .","ref":"ClaperWeb.Gettext.html#ngettext_noop/2","title":"ClaperWeb.Gettext.ngettext_noop/2","type":"macro"},{"doc":"Callback implementation for Gettext.Backend.pgettext/3 .","ref":"ClaperWeb.Gettext.html#pgettext/3","title":"ClaperWeb.Gettext.pgettext/3","type":"macro"},{"doc":"","ref":"ClaperWeb.Gettext.html#pgettext_noop/2","title":"ClaperWeb.Gettext.pgettext_noop/2","type":"macro"},{"doc":"Callback implementation for Gettext.Backend.pngettext/5 .","ref":"ClaperWeb.Gettext.html#pngettext/5","title":"ClaperWeb.Gettext.pngettext/5","type":"macro"},{"doc":"","ref":"ClaperWeb.Gettext.html#pngettext_noop/3","title":"ClaperWeb.Gettext.pngettext_noop/3","type":"macro"},{"doc":"","ref":"ClaperWeb.LayoutView.html","title":"ClaperWeb.LayoutView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"ClaperWeb.LayoutView.html#__resource__/0","title":"ClaperWeb.LayoutView.__resource__/0","type":"function"},{"doc":"","ref":"ClaperWeb.LayoutView.html#active_class/2","title":"ClaperWeb.LayoutView.active_class/2","type":"function"},{"doc":"","ref":"ClaperWeb.LayoutView.html#active_link/3","title":"ClaperWeb.LayoutView.active_link/3","type":"function"},{"doc":"","ref":"ClaperWeb.LayoutView.html#active_live_class/2","title":"ClaperWeb.LayoutView.active_live_class/2","type":"function"},{"doc":"Renders the given template locally.","ref":"ClaperWeb.LayoutView.html#render/2","title":"ClaperWeb.LayoutView.render/2","type":"function"},{"doc":"Callback invoked when no template is found. By default it raises but can be customized to render a particular template.","ref":"ClaperWeb.LayoutView.html#template_not_found/2","title":"ClaperWeb.LayoutView.template_not_found/2","type":"function"},{"doc":"","ref":"ClaperWeb.LiveHelpers.html","title":"ClaperWeb.LiveHelpers","type":"module"},{"doc":"Renders a component inside the ClaperWeb.ModalComponent component. The rendered modal receives a :return_to option to properly update the URL when the modal is closed. Examples < % = live_modal ClaperWeb.PostLive.FormComponent , id : @post . id || :new , action : @live_action , post : @post , return_to : Routes . post_index_path ( @socket , :index ) % >","ref":"ClaperWeb.LiveHelpers.html#live_modal/2","title":"ClaperWeb.LiveHelpers.live_modal/2","type":"function"},{"doc":"","ref":"ClaperWeb.ModalComponent.html","title":"ClaperWeb.ModalComponent","type":"module"},{"doc":"","ref":"ClaperWeb.ModalComponent.html#hide_modal/1","title":"ClaperWeb.ModalComponent.hide_modal/1","type":"function"},{"doc":"","ref":"ClaperWeb.Notifiers.UserNotifier.html","title":"ClaperWeb.Notifiers.UserNotifier","type":"module"},{"doc":"","ref":"ClaperWeb.Notifiers.UserNotifier.html#magic/2","title":"ClaperWeb.Notifiers.UserNotifier.magic/2","type":"function"},{"doc":"","ref":"ClaperWeb.Notifiers.UserNotifier.html#render_body/3","title":"ClaperWeb.Notifiers.UserNotifier.render_body/3","type":"function"},{"doc":"","ref":"ClaperWeb.Notifiers.UserNotifier.html#update_email/2","title":"ClaperWeb.Notifiers.UserNotifier.update_email/2","type":"function"},{"doc":"","ref":"ClaperWeb.Notifiers.UserNotifier.html#welcome/1","title":"ClaperWeb.Notifiers.UserNotifier.welcome/1","type":"function"},{"doc":"","ref":"ClaperWeb.PageController.html","title":"ClaperWeb.PageController","type":"module"},{"doc":"","ref":"ClaperWeb.PageController.html#index/2","title":"ClaperWeb.PageController.index/2","type":"function"},{"doc":"","ref":"ClaperWeb.PageController.html#privacy/2","title":"ClaperWeb.PageController.privacy/2","type":"function"},{"doc":"","ref":"ClaperWeb.PageController.html#tos/2","title":"ClaperWeb.PageController.tos/2","type":"function"},{"doc":"","ref":"ClaperWeb.PageView.html","title":"ClaperWeb.PageView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"ClaperWeb.PageView.html#__resource__/0","title":"ClaperWeb.PageView.__resource__/0","type":"function"},{"doc":"Renders the given template locally.","ref":"ClaperWeb.PageView.html#render/2","title":"ClaperWeb.PageView.render/2","type":"function"},{"doc":"Callback invoked when no template is found. By default it raises but can be customized to render a particular template.","ref":"ClaperWeb.PageView.html#template_not_found/2","title":"ClaperWeb.PageView.template_not_found/2","type":"function"},{"doc":"","ref":"ClaperWeb.Plugs.Locale.html","title":"ClaperWeb.Plugs.Locale","type":"module"},{"doc":"","ref":"ClaperWeb.Plugs.Locale.html#call/2","title":"ClaperWeb.Plugs.Locale.call/2","type":"function"},{"doc":"","ref":"ClaperWeb.Plugs.Locale.html#extract_accept_language/1","title":"ClaperWeb.Plugs.Locale.extract_accept_language/1","type":"function"},{"doc":"","ref":"ClaperWeb.Plugs.Locale.html#init/1","title":"ClaperWeb.Plugs.Locale.init/1","type":"function"},{"doc":"Provides presence tracking to channels and processes. See the Phoenix.Presence docs for more details.","ref":"ClaperWeb.Presence.html","title":"ClaperWeb.Presence","type":"module"},{"doc":"","ref":"ClaperWeb.Presence.html#child_spec/1","title":"ClaperWeb.Presence.child_spec/1","type":"function"},{"doc":"Callback implementation for Phoenix.Presence.fetch/2 .","ref":"ClaperWeb.Presence.html#fetch/2","title":"ClaperWeb.Presence.fetch/2","type":"function"},{"doc":"","ref":"ClaperWeb.Presence.html#fetchers_pids/0","title":"ClaperWeb.Presence.fetchers_pids/0","type":"function"},{"doc":"Callback implementation for Phoenix.Presence.get_by_key/2 .","ref":"ClaperWeb.Presence.html#get_by_key/2","title":"ClaperWeb.Presence.get_by_key/2","type":"function"},{"doc":"Callback implementation for Phoenix.Presence.list/1 .","ref":"ClaperWeb.Presence.html#list/1","title":"ClaperWeb.Presence.list/1","type":"function"},{"doc":"Callback implementation for Phoenix.Presence.track/3 .","ref":"ClaperWeb.Presence.html#track/3","title":"ClaperWeb.Presence.track/3","type":"function"},{"doc":"Callback implementation for Phoenix.Presence.track/4 .","ref":"ClaperWeb.Presence.html#track/4","title":"ClaperWeb.Presence.track/4","type":"function"},{"doc":"Callback implementation for Phoenix.Presence.untrack/2 .","ref":"ClaperWeb.Presence.html#untrack/2","title":"ClaperWeb.Presence.untrack/2","type":"function"},{"doc":"Callback implementation for Phoenix.Presence.untrack/3 .","ref":"ClaperWeb.Presence.html#untrack/3","title":"ClaperWeb.Presence.untrack/3","type":"function"},{"doc":"Callback implementation for Phoenix.Presence.update/3 .","ref":"ClaperWeb.Presence.html#update/3","title":"ClaperWeb.Presence.update/3","type":"function"},{"doc":"Callback implementation for Phoenix.Presence.update/4 .","ref":"ClaperWeb.Presence.html#update/4","title":"ClaperWeb.Presence.update/4","type":"function"},{"doc":"","ref":"ClaperWeb.Router.html","title":"ClaperWeb.Router","type":"module"},{"doc":"","ref":"ClaperWeb.Router.html#api/2","title":"ClaperWeb.Router.api/2","type":"function"},{"doc":"","ref":"ClaperWeb.Router.html#attendee_registration/2","title":"ClaperWeb.Router.attendee_registration/2","type":"function"},{"doc":"","ref":"ClaperWeb.Router.html#browser/2","title":"ClaperWeb.Router.browser/2","type":"function"},{"doc":"Callback invoked by Plug on every request.","ref":"ClaperWeb.Router.html#call/2","title":"ClaperWeb.Router.call/2","type":"function"},{"doc":"Callback required by Plug that initializes the router for serving web requests.","ref":"ClaperWeb.Router.html#init/1","title":"ClaperWeb.Router.init/1","type":"function"},{"doc":"Module with named helpers generated from ClaperWeb.Router.","ref":"ClaperWeb.Router.Helpers.html","title":"ClaperWeb.Router.Helpers","type":"module"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_index_path/2","title":"ClaperWeb.Router.Helpers.event_index_path/2","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_index_path/3","title":"ClaperWeb.Router.Helpers.event_index_path/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_index_path/4","title":"ClaperWeb.Router.Helpers.event_index_path/4","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_index_url/2","title":"ClaperWeb.Router.Helpers.event_index_url/2","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_index_url/3","title":"ClaperWeb.Router.Helpers.event_index_url/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_index_url/4","title":"ClaperWeb.Router.Helpers.event_index_url/4","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_join_path/2","title":"ClaperWeb.Router.Helpers.event_join_path/2","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_join_path/3","title":"ClaperWeb.Router.Helpers.event_join_path/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_join_url/2","title":"ClaperWeb.Router.Helpers.event_join_url/2","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_join_url/3","title":"ClaperWeb.Router.Helpers.event_join_url/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_manage_path/3","title":"ClaperWeb.Router.Helpers.event_manage_path/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_manage_path/4","title":"ClaperWeb.Router.Helpers.event_manage_path/4","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_manage_path/5","title":"ClaperWeb.Router.Helpers.event_manage_path/5","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_manage_url/3","title":"ClaperWeb.Router.Helpers.event_manage_url/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_manage_url/4","title":"ClaperWeb.Router.Helpers.event_manage_url/4","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_manage_url/5","title":"ClaperWeb.Router.Helpers.event_manage_url/5","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_path/3","title":"ClaperWeb.Router.Helpers.event_path/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_path/4","title":"ClaperWeb.Router.Helpers.event_path/4","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_presenter_path/3","title":"ClaperWeb.Router.Helpers.event_presenter_path/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_presenter_path/4","title":"ClaperWeb.Router.Helpers.event_presenter_path/4","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_presenter_url/3","title":"ClaperWeb.Router.Helpers.event_presenter_url/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_presenter_url/4","title":"ClaperWeb.Router.Helpers.event_presenter_url/4","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_show_path/3","title":"ClaperWeb.Router.Helpers.event_show_path/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_show_path/4","title":"ClaperWeb.Router.Helpers.event_show_path/4","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_show_url/3","title":"ClaperWeb.Router.Helpers.event_show_url/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_show_url/4","title":"ClaperWeb.Router.Helpers.event_show_url/4","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_url/3","title":"ClaperWeb.Router.Helpers.event_url/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#event_url/4","title":"ClaperWeb.Router.Helpers.event_url/4","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#live_dashboard_path/2","title":"ClaperWeb.Router.Helpers.live_dashboard_path/2","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#live_dashboard_path/3","title":"ClaperWeb.Router.Helpers.live_dashboard_path/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#live_dashboard_path/4","title":"ClaperWeb.Router.Helpers.live_dashboard_path/4","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#live_dashboard_path/5","title":"ClaperWeb.Router.Helpers.live_dashboard_path/5","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#live_dashboard_url/2","title":"ClaperWeb.Router.Helpers.live_dashboard_url/2","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#live_dashboard_url/3","title":"ClaperWeb.Router.Helpers.live_dashboard_url/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#live_dashboard_url/4","title":"ClaperWeb.Router.Helpers.live_dashboard_url/4","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#live_dashboard_url/5","title":"ClaperWeb.Router.Helpers.live_dashboard_url/5","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#page_path/2","title":"ClaperWeb.Router.Helpers.page_path/2","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#page_path/3","title":"ClaperWeb.Router.Helpers.page_path/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#page_url/2","title":"ClaperWeb.Router.Helpers.page_url/2","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#page_url/3","title":"ClaperWeb.Router.Helpers.page_url/3","type":"function"},{"doc":"Generates the path information including any necessary prefix.","ref":"ClaperWeb.Router.Helpers.html#path/2","title":"ClaperWeb.Router.Helpers.path/2","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#stat_index_path/3","title":"ClaperWeb.Router.Helpers.stat_index_path/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#stat_index_path/4","title":"ClaperWeb.Router.Helpers.stat_index_path/4","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#stat_index_url/3","title":"ClaperWeb.Router.Helpers.stat_index_url/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#stat_index_url/4","title":"ClaperWeb.Router.Helpers.stat_index_url/4","type":"function"},{"doc":"Generates an integrity hash to a static asset given its file path.","ref":"ClaperWeb.Router.Helpers.html#static_integrity/2","title":"ClaperWeb.Router.Helpers.static_integrity/2","type":"function"},{"doc":"Generates path to a static asset given its file path.","ref":"ClaperWeb.Router.Helpers.html#static_path/2","title":"ClaperWeb.Router.Helpers.static_path/2","type":"function"},{"doc":"Generates url to a static asset given its file path.","ref":"ClaperWeb.Router.Helpers.html#static_url/2","title":"ClaperWeb.Router.Helpers.static_url/2","type":"function"},{"doc":"Generates the connection/endpoint base URL without any path information.","ref":"ClaperWeb.Router.Helpers.html#url/1","title":"ClaperWeb.Router.Helpers.url/1","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_confirmation_path/2","title":"ClaperWeb.Router.Helpers.user_confirmation_path/2","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_confirmation_path/3","title":"ClaperWeb.Router.Helpers.user_confirmation_path/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_confirmation_path/4","title":"ClaperWeb.Router.Helpers.user_confirmation_path/4","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_confirmation_url/2","title":"ClaperWeb.Router.Helpers.user_confirmation_url/2","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_confirmation_url/3","title":"ClaperWeb.Router.Helpers.user_confirmation_url/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_confirmation_url/4","title":"ClaperWeb.Router.Helpers.user_confirmation_url/4","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_registration_path/2","title":"ClaperWeb.Router.Helpers.user_registration_path/2","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_registration_path/3","title":"ClaperWeb.Router.Helpers.user_registration_path/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_registration_url/2","title":"ClaperWeb.Router.Helpers.user_registration_url/2","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_registration_url/3","title":"ClaperWeb.Router.Helpers.user_registration_url/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_session_path/2","title":"ClaperWeb.Router.Helpers.user_session_path/2","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_session_path/3","title":"ClaperWeb.Router.Helpers.user_session_path/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_session_url/2","title":"ClaperWeb.Router.Helpers.user_session_url/2","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_session_url/3","title":"ClaperWeb.Router.Helpers.user_session_url/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_settings_path/3","title":"ClaperWeb.Router.Helpers.user_settings_path/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_settings_path/4","title":"ClaperWeb.Router.Helpers.user_settings_path/4","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_settings_show_path/2","title":"ClaperWeb.Router.Helpers.user_settings_show_path/2","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_settings_show_path/3","title":"ClaperWeb.Router.Helpers.user_settings_show_path/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_settings_show_url/2","title":"ClaperWeb.Router.Helpers.user_settings_show_url/2","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_settings_show_url/3","title":"ClaperWeb.Router.Helpers.user_settings_show_url/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_settings_url/3","title":"ClaperWeb.Router.Helpers.user_settings_url/3","type":"function"},{"doc":"","ref":"ClaperWeb.Router.Helpers.html#user_settings_url/4","title":"ClaperWeb.Router.Helpers.user_settings_url/4","type":"function"},{"doc":"","ref":"ClaperWeb.StatLive.Index.html","title":"ClaperWeb.StatLive.Index","type":"module"},{"doc":"Callback implementation for Phoenix.LiveView.render/1 .","ref":"ClaperWeb.StatLive.Index.html#render/1","title":"ClaperWeb.StatLive.Index.render/1","type":"function"},{"doc":"","ref":"ClaperWeb.Telemetry.html","title":"ClaperWeb.Telemetry","type":"module"},{"doc":"Returns a specification to start this module under a supervisor. See Supervisor .","ref":"ClaperWeb.Telemetry.html#child_spec/1","title":"ClaperWeb.Telemetry.child_spec/1","type":"function"},{"doc":"","ref":"ClaperWeb.Telemetry.html#metrics/0","title":"ClaperWeb.Telemetry.metrics/0","type":"function"},{"doc":"","ref":"ClaperWeb.Telemetry.html#start_link/1","title":"ClaperWeb.Telemetry.start_link/1","type":"function"},{"doc":"","ref":"ClaperWeb.UserNotifierView.html","title":"ClaperWeb.UserNotifierView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"ClaperWeb.UserNotifierView.html#__resource__/0","title":"ClaperWeb.UserNotifierView.__resource__/0","type":"function"},{"doc":"Renders the given template locally.","ref":"ClaperWeb.UserNotifierView.html#render/2","title":"ClaperWeb.UserNotifierView.render/2","type":"function"},{"doc":"Callback invoked when no template is found. By default it raises but can be customized to render a particular template.","ref":"ClaperWeb.UserNotifierView.html#template_not_found/2","title":"ClaperWeb.UserNotifierView.template_not_found/2","type":"function"},{"doc":"Dependency-free S3 Form Upload using HTTP POST sigv4 https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-post-example.html","ref":"SimpleS3Upload.html","title":"SimpleS3Upload","type":"module"},{"doc":"Signs a form upload. The configuration is a map which must contain the following keys: :region - The AWS region, such as "us-east-1" :access_key_id - The AWS access key id :secret_access_key - The AWS secret access key Returns a map of form fields to be used on the client via the JavaScript FormData API. Options :key - The required key of the object to be uploaded. :max_file_size - The required maximum allowed file size in bytes. :content_type - The required MIME type of the file to be uploaded. :expires_in - The required expiration time in milliseconds from now before the signed upload expires. Examples config = %{ region : "us-east-1" , access_key_id : System . fetch_env! ( "AWS_ACCESS_KEY_ID" ) , secret_access_key : System . fetch_env! ( "AWS_SECRET_ACCESS_KEY" ) } { :ok , fields } = SimpleS3Upload . sign_form_upload ( config , "my-bucket" , key : "public/my-file-name" , content_type : "image/png" , max_file_size : 10_000 , expires_in : :timer . hours ( 1 ) )","ref":"SimpleS3Upload.html#sign_form_upload/3","title":"SimpleS3Upload.sign_form_upload/3","type":"function"},{"doc":"","ref":"Utils.FileUpload.html","title":"Utils.FileUpload","type":"module"},{"doc":"","ref":"Utils.FileUpload.html#upload/3","title":"Utils.FileUpload.upload/3","type":"function"},{"doc":"The Accounts context.","ref":"Claper.Accounts.html","title":"Claper.Accounts","type":"module"},{"doc":"Emulates that the email will change without actually changing it in the database. Examples iex> apply_user_email ( user , "valid password" , %{ email : ... } ) { :ok , % User { } } iex> apply_user_email ( user , "invalid password" , %{ email : ... } ) { :error , % Ecto.Changeset { } }","ref":"Claper.Accounts.html#apply_user_email/2","title":"Claper.Accounts.apply_user_email/2","type":"function"},{"doc":"Returns an %Ecto.Changeset{} for changing the user email. Examples iex> change_user_email ( user ) % Ecto.Changeset { data : % User { } }","ref":"Claper.Accounts.html#change_user_email/2","title":"Claper.Accounts.change_user_email/2","type":"function"},{"doc":"Returns an %Ecto.Changeset{} for tracking user changes. Examples iex> change_user_registration ( user ) % Ecto.Changeset { data : % User { } }","ref":"Claper.Accounts.html#change_user_registration/2","title":"Claper.Accounts.change_user_registration/2","type":"function"},{"doc":"","ref":"Claper.Accounts.html#confirm_magic/1","title":"Claper.Accounts.confirm_magic/1","type":"function"},{"doc":"Confirms a user by the given token. If the token matches, the user account is marked as confirmed and the token is deleted.","ref":"Claper.Accounts.html#confirm_user/1","title":"Claper.Accounts.confirm_user/1","type":"function"},{"doc":"Deletes the signed token with the given context.","ref":"Claper.Accounts.html#delete_session_token/1","title":"Claper.Accounts.delete_session_token/1","type":"function"},{"doc":"Delivers the magic link email to the given user. Examples iex> deliver_magic_link ( user , & Routes . user_confirmation_url ( conn , :confirm_magic , &1 ) ) { :ok , %{ to : ... , body : ... } }","ref":"Claper.Accounts.html#deliver_magic_link/2","title":"Claper.Accounts.deliver_magic_link/2","type":"function"},{"doc":"Delivers the update email instructions to the given user. Examples iex> deliver_update_email_instructions ( user , current_email , & Routes . user_update_email_url ( conn , :edit , &1 ) ) { :ok , %{ to : ... , body : ... } }","ref":"Claper.Accounts.html#deliver_update_email_instructions/3","title":"Claper.Accounts.deliver_update_email_instructions/3","type":"function"},{"doc":"Delivers the confirmation email instructions to the given user. Examples iex> deliver_user_confirmation_instructions ( user , & Routes . user_confirmation_url ( conn , :edit , &1 ) ) { :ok , %{ to : ... , body : ... } } iex> deliver_user_confirmation_instructions ( confirmed_user , & Routes . user_confirmation_url ( conn , :edit , &1 ) ) { :error , :already_confirmed }","ref":"Claper.Accounts.html#deliver_user_confirmation_instructions/2","title":"Claper.Accounts.deliver_user_confirmation_instructions/2","type":"function"},{"doc":"Generates a session token.","ref":"Claper.Accounts.html#generate_user_session_token/1","title":"Claper.Accounts.generate_user_session_token/1","type":"function"},{"doc":"Gets a single user. Raises Ecto.NoResultsError if the User does not exist. Examples iex> get_user! ( 123 ) % User { } iex> get_user! ( 456 ) ** (Ecto.NoResultsError)","ref":"Claper.Accounts.html#get_user!/1","title":"Claper.Accounts.get_user!/1","type":"function"},{"doc":"Gets a user by email. Examples iex> get_user_by_email ( "foo@example.com" ) % User { } iex> get_user_by_email ( "unknown@example.com" ) nil","ref":"Claper.Accounts.html#get_user_by_email/1","title":"Claper.Accounts.get_user_by_email/1","type":"function"},{"doc":"Gets the user with the given signed token.","ref":"Claper.Accounts.html#get_user_by_session_token/1","title":"Claper.Accounts.get_user_by_session_token/1","type":"function"},{"doc":"Verify the token for a given user email is valid.","ref":"Claper.Accounts.html#magic_token_valid?/1","title":"Claper.Accounts.magic_token_valid?/1","type":"function"},{"doc":"Registers a user. Examples iex> register_user ( %{ field : value } ) { :ok , % User { } } iex> register_user ( %{ field : bad_value } ) { :error , % Ecto.Changeset { } }","ref":"Claper.Accounts.html#register_user/1","title":"Claper.Accounts.register_user/1","type":"function"},{"doc":"Updates the user email using the given token. If the token matches, the user email is updated and the token is deleted. The confirmed_at date is also updated to the current time.","ref":"Claper.Accounts.html#update_user_email/2","title":"Claper.Accounts.update_user_email/2","type":"function"},{"doc":"","ref":"Claper.Accounts.User.html","title":"Claper.Accounts.User","type":"module"},{"doc":"Confirms the account by setting confirmed_at .","ref":"Claper.Accounts.User.html#confirm_changeset/1","title":"Claper.Accounts.User.confirm_changeset/1","type":"function"},{"doc":"A user changeset for changing the email. It requires the email to change otherwise an error is added.","ref":"Claper.Accounts.User.html#email_changeset/2","title":"Claper.Accounts.User.email_changeset/2","type":"function"},{"doc":"","ref":"Claper.Accounts.User.html#registration_changeset/3","title":"Claper.Accounts.User.registration_changeset/3","type":"function"},{"doc":"","ref":"Claper.Accounts.UserNotifier.html","title":"Claper.Accounts.UserNotifier","type":"module"},{"doc":"Deliver instructions to confirm account.","ref":"Claper.Accounts.UserNotifier.html#deliver_confirmation_instructions/2","title":"Claper.Accounts.UserNotifier.deliver_confirmation_instructions/2","type":"function"},{"doc":"","ref":"Claper.Accounts.UserNotifier.html#deliver_magic_link/2","title":"Claper.Accounts.UserNotifier.deliver_magic_link/2","type":"function"},{"doc":"Deliver instructions to reset a user password.","ref":"Claper.Accounts.UserNotifier.html#deliver_reset_password_instructions/2","title":"Claper.Accounts.UserNotifier.deliver_reset_password_instructions/2","type":"function"},{"doc":"Deliver instructions to update a user email.","ref":"Claper.Accounts.UserNotifier.html#deliver_update_email_instructions/2","title":"Claper.Accounts.UserNotifier.deliver_update_email_instructions/2","type":"function"},{"doc":"","ref":"Claper.Accounts.UserNotifier.html#deliver_welcome/1","title":"Claper.Accounts.UserNotifier.deliver_welcome/1","type":"function"},{"doc":"","ref":"Claper.Accounts.UserToken.html","title":"Claper.Accounts.UserToken","type":"module"},{"doc":"Builds a token and its hash to be delivered to the user's email. The non-hashed token is sent to the user email while the hashed part is stored in the database. The original token cannot be reconstructed, which means anyone with read-only access to the database cannot directly use the token in the application to gain access. Furthermore, if the user changes their email in the system, the tokens sent to the previous email are no longer valid. Users can easily adapt the existing code to provide other types of delivery methods, for example, by phone numbers.","ref":"Claper.Accounts.UserToken.html#build_email_token/2","title":"Claper.Accounts.UserToken.build_email_token/2","type":"function"},{"doc":"","ref":"Claper.Accounts.UserToken.html#build_magic_token/2","title":"Claper.Accounts.UserToken.build_magic_token/2","type":"function"},{"doc":"Generates a token that will be stored in a signed place, such as session or cookie. As they are signed, those tokens do not need to be hashed. The reason why we store session tokens in the database, even though Phoenix already provides a session cookie, is because Phoenix' default session cookies are not persisted, they are simply signed and potentially encrypted. This means they are valid indefinitely, unless you change the signing/encryption salt. Therefore, storing them allows individual user sessions to be expired. The token system can also be extended to store additional data, such as the device used for logging in. You could then use this information to display all valid sessions and devices in the UI and allow users to explicitly expire any session they deem invalid.","ref":"Claper.Accounts.UserToken.html#build_session_token/1","title":"Claper.Accounts.UserToken.build_session_token/1","type":"function"},{"doc":"Returns the token struct for the given token value and context.","ref":"Claper.Accounts.UserToken.html#token_and_context_query/2","title":"Claper.Accounts.UserToken.token_and_context_query/2","type":"function"},{"doc":"Gets all tokens for the given user for the given contexts.","ref":"Claper.Accounts.UserToken.html#user_and_contexts_query/2","title":"Claper.Accounts.UserToken.user_and_contexts_query/2","type":"function"},{"doc":"","ref":"Claper.Accounts.UserToken.html#user_magic_and_contexts_expiry_query/1","title":"Claper.Accounts.UserToken.user_magic_and_contexts_expiry_query/1","type":"function"},{"doc":"","ref":"Claper.Accounts.UserToken.html#user_magic_and_contexts_query/2","title":"Claper.Accounts.UserToken.user_magic_and_contexts_query/2","type":"function"},{"doc":"Checks if the token is valid and returns its underlying lookup query. The query returns the user found by the token, if any. This is used to validate requests to change the user email. It is different from verify_email_token_query/2 precisely because verify_email_token_query/2 validates the email has not changed, which is the starting point by this function. The given token is valid if it matches its hashed counterpart in the database and if it has not expired (after @change_email_validity_in_days). The context must always start with "change:".","ref":"Claper.Accounts.UserToken.html#verify_change_email_token_query/2","title":"Claper.Accounts.UserToken.verify_change_email_token_query/2","type":"function"},{"doc":"Checks if the token is valid and returns its underlying lookup query. The query returns the user found by the token, if any. The given token is valid if it matches its hashed counterpart in the database and the user email has not changed. This function also checks if the token is being used within a certain period, depending on the context. The default contexts supported by this function are either "confirm", for account confirmation emails, and "reset_password", for resetting the password. For verifying requests to change the email, see verify_change_email_token_query/2 .","ref":"Claper.Accounts.UserToken.html#verify_email_token_query/2","title":"Claper.Accounts.UserToken.verify_email_token_query/2","type":"function"},{"doc":"","ref":"Claper.Accounts.UserToken.html#verify_magic_token_query/2","title":"Claper.Accounts.UserToken.verify_magic_token_query/2","type":"function"},{"doc":"Checks if the token is valid and returns its underlying lookup query. The query returns the user found by the token, if any. The token is valid if it matches the value in the database and it has not expired (after @session_validity_in_days).","ref":"Claper.Accounts.UserToken.html#verify_session_token_query/1","title":"Claper.Accounts.UserToken.verify_session_token_query/1","type":"function"},{"doc":"","ref":"ClaperWeb.AttendeeLiveAuth.html","title":"ClaperWeb.AttendeeLiveAuth","type":"module"},{"doc":"","ref":"ClaperWeb.AttendeeLiveAuth.html#on_mount/4","title":"ClaperWeb.AttendeeLiveAuth.on_mount/4","type":"function"},{"doc":"","ref":"ClaperWeb.AttendeeRegistrationView.html","title":"ClaperWeb.AttendeeRegistrationView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"ClaperWeb.AttendeeRegistrationView.html#__resource__/0","title":"ClaperWeb.AttendeeRegistrationView.__resource__/0","type":"function"},{"doc":"Renders the given template locally.","ref":"ClaperWeb.AttendeeRegistrationView.html#render/2","title":"ClaperWeb.AttendeeRegistrationView.render/2","type":"function"},{"doc":"Callback invoked when no template is found. By default it raises but can be customized to render a particular template.","ref":"ClaperWeb.AttendeeRegistrationView.html#template_not_found/2","title":"ClaperWeb.AttendeeRegistrationView.template_not_found/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserAuth.html","title":"ClaperWeb.UserAuth","type":"module"},{"doc":"Authenticates the user by looking into the session and remember me token.","ref":"ClaperWeb.UserAuth.html#fetch_current_user/2","title":"ClaperWeb.UserAuth.fetch_current_user/2","type":"function"},{"doc":"Logs the user in. It renews the session ID and clears the whole session to avoid fixation attacks. See the renew_session function to customize this behaviour. It also sets a :live_socket_id key in the session, so LiveView sessions are identified and automatically disconnected on log out. The line can be safely removed if you are not using LiveView.","ref":"ClaperWeb.UserAuth.html#log_in_user/3","title":"ClaperWeb.UserAuth.log_in_user/3","type":"function"},{"doc":"Logs the user out. It clears all session data for safety. See renew_session.","ref":"ClaperWeb.UserAuth.html#log_out_user/1","title":"ClaperWeb.UserAuth.log_out_user/1","type":"function"},{"doc":"Used for routes that require the user to not be authenticated.","ref":"ClaperWeb.UserAuth.html#redirect_if_user_is_authenticated/2","title":"ClaperWeb.UserAuth.redirect_if_user_is_authenticated/2","type":"function"},{"doc":"Used for routes that require the user to be authenticated. If you want to enforce the user email is confirmed before they use the application at all, here would be a good place.","ref":"ClaperWeb.UserAuth.html#require_authenticated_user/2","title":"ClaperWeb.UserAuth.require_authenticated_user/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserConfirmationController.html","title":"ClaperWeb.UserConfirmationController","type":"module"},{"doc":"","ref":"ClaperWeb.UserConfirmationController.html#confirm_magic/2","title":"ClaperWeb.UserConfirmationController.confirm_magic/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserConfirmationController.html#create/2","title":"ClaperWeb.UserConfirmationController.create/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserConfirmationController.html#edit/2","title":"ClaperWeb.UserConfirmationController.edit/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserConfirmationController.html#new/2","title":"ClaperWeb.UserConfirmationController.new/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserConfirmationController.html#update/2","title":"ClaperWeb.UserConfirmationController.update/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserConfirmationView.html","title":"ClaperWeb.UserConfirmationView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"ClaperWeb.UserConfirmationView.html#__resource__/0","title":"ClaperWeb.UserConfirmationView.__resource__/0","type":"function"},{"doc":"Renders the given template locally.","ref":"ClaperWeb.UserConfirmationView.html#render/2","title":"ClaperWeb.UserConfirmationView.render/2","type":"function"},{"doc":"Callback invoked when no template is found. By default it raises but can be customized to render a particular template.","ref":"ClaperWeb.UserConfirmationView.html#template_not_found/2","title":"ClaperWeb.UserConfirmationView.template_not_found/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserLiveAuth.html","title":"ClaperWeb.UserLiveAuth","type":"module"},{"doc":"","ref":"ClaperWeb.UserLiveAuth.html#on_mount/4","title":"ClaperWeb.UserLiveAuth.on_mount/4","type":"function"},{"doc":"","ref":"ClaperWeb.UserRegistrationController.html","title":"ClaperWeb.UserRegistrationController","type":"module"},{"doc":"","ref":"ClaperWeb.UserRegistrationController.html#confirm/2","title":"ClaperWeb.UserRegistrationController.confirm/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserRegistrationController.html#create/2","title":"ClaperWeb.UserRegistrationController.create/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserRegistrationController.html#new/2","title":"ClaperWeb.UserRegistrationController.new/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserRegistrationView.html","title":"ClaperWeb.UserRegistrationView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"ClaperWeb.UserRegistrationView.html#__resource__/0","title":"ClaperWeb.UserRegistrationView.__resource__/0","type":"function"},{"doc":"Renders the given template locally.","ref":"ClaperWeb.UserRegistrationView.html#render/2","title":"ClaperWeb.UserRegistrationView.render/2","type":"function"},{"doc":"Callback invoked when no template is found. By default it raises but can be customized to render a particular template.","ref":"ClaperWeb.UserRegistrationView.html#template_not_found/2","title":"ClaperWeb.UserRegistrationView.template_not_found/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserResetPasswordView.html","title":"ClaperWeb.UserResetPasswordView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"ClaperWeb.UserResetPasswordView.html#__resource__/0","title":"ClaperWeb.UserResetPasswordView.__resource__/0","type":"function"},{"doc":"Renders the given template locally.","ref":"ClaperWeb.UserResetPasswordView.html#render/2","title":"ClaperWeb.UserResetPasswordView.render/2","type":"function"},{"doc":"Callback invoked when no template is found. By default it raises but can be customized to render a particular template.","ref":"ClaperWeb.UserResetPasswordView.html#template_not_found/2","title":"ClaperWeb.UserResetPasswordView.template_not_found/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserSessionController.html","title":"ClaperWeb.UserSessionController","type":"module"},{"doc":"","ref":"ClaperWeb.UserSessionController.html#create/2","title":"ClaperWeb.UserSessionController.create/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserSessionController.html#delete/2","title":"ClaperWeb.UserSessionController.delete/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserSessionController.html#new/2","title":"ClaperWeb.UserSessionController.new/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserSessionView.html","title":"ClaperWeb.UserSessionView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"ClaperWeb.UserSessionView.html#__resource__/0","title":"ClaperWeb.UserSessionView.__resource__/0","type":"function"},{"doc":"Renders the given template locally.","ref":"ClaperWeb.UserSessionView.html#render/2","title":"ClaperWeb.UserSessionView.render/2","type":"function"},{"doc":"Callback invoked when no template is found. By default it raises but can be customized to render a particular template.","ref":"ClaperWeb.UserSessionView.html#template_not_found/2","title":"ClaperWeb.UserSessionView.template_not_found/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserSettingsController.html","title":"ClaperWeb.UserSettingsController","type":"module"},{"doc":"","ref":"ClaperWeb.UserSettingsController.html#confirm_email/2","title":"ClaperWeb.UserSettingsController.confirm_email/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserSettingsController.html#edit/2","title":"ClaperWeb.UserSettingsController.edit/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserSettingsController.html#update/2","title":"ClaperWeb.UserSettingsController.update/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserSettingsLive.FormComponent.html","title":"ClaperWeb.UserSettingsLive.FormComponent","type":"module"},{"doc":"Callback implementation for Phoenix.LiveComponent.render/1 .","ref":"ClaperWeb.UserSettingsLive.FormComponent.html#render/1","title":"ClaperWeb.UserSettingsLive.FormComponent.render/1","type":"function"},{"doc":"","ref":"ClaperWeb.UserSettingsLive.Show.html","title":"ClaperWeb.UserSettingsLive.Show","type":"module"},{"doc":"Callback implementation for Phoenix.LiveView.render/1 .","ref":"ClaperWeb.UserSettingsLive.Show.html#render/1","title":"ClaperWeb.UserSettingsLive.Show.render/1","type":"function"},{"doc":"","ref":"ClaperWeb.UserSettingsView.html","title":"ClaperWeb.UserSettingsView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"ClaperWeb.UserSettingsView.html#__resource__/0","title":"ClaperWeb.UserSettingsView.__resource__/0","type":"function"},{"doc":"Renders the given template locally.","ref":"ClaperWeb.UserSettingsView.html#render/2","title":"ClaperWeb.UserSettingsView.render/2","type":"function"},{"doc":"Callback invoked when no template is found. By default it raises but can be customized to render a particular template.","ref":"ClaperWeb.UserSettingsView.html#template_not_found/2","title":"ClaperWeb.UserSettingsView.template_not_found/2","type":"function"},{"doc":"","ref":"ClaperWeb.UserView.html","title":"ClaperWeb.UserView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"ClaperWeb.UserView.html#__resource__/0","title":"ClaperWeb.UserView.__resource__/0","type":"function"},{"doc":"Renders the given template locally.","ref":"ClaperWeb.UserView.html#render/2","title":"ClaperWeb.UserView.render/2","type":"function"},{"doc":"Callback invoked when no template is found. By default it raises but can be customized to render a particular template.","ref":"ClaperWeb.UserView.html#template_not_found/2","title":"ClaperWeb.UserView.template_not_found/2","type":"function"},{"doc":"The Events context. An activity leader is a facilitator, a user invited to manage an event.","ref":"Claper.Events.html","title":"Claper.Events","type":"module"},{"doc":"Returns an %Ecto.Changeset{} for tracking facilitator changes. Examples iex> change_activity_leader ( activity_leader ) % Ecto.Changeset { data : % ActivityLeader { } }","ref":"Claper.Events.html#change_activity_leader/2","title":"Claper.Events.change_activity_leader/2","type":"function"},{"doc":"Returns an %Ecto.Changeset{} for tracking event changes. Examples iex> change_event ( event ) % Ecto.Changeset { data : % Event { } }","ref":"Claper.Events.html#change_event/2","title":"Claper.Events.change_event/2","type":"function"},{"doc":"","ref":"Claper.Events.html#count_events_month/1","title":"Claper.Events.count_events_month/1","type":"function"},{"doc":"Creates a event. Examples iex> create_event ( %{ field : value } ) { :ok , % Event { } } iex> create_event ( %{ field : bad_value } ) { :error , % Ecto.Changeset { } }","ref":"Claper.Events.html#create_event/1","title":"Claper.Events.create_event/1","type":"function"},{"doc":"Deletes a event. Examples iex> delete_event ( event ) { :ok , % Event { } } iex> delete_event ( event ) { :error , % Ecto.Changeset { } }","ref":"Claper.Events.html#delete_event/1","title":"Claper.Events.delete_event/1","type":"function"},{"doc":"Gets a single facilitator. Raises Ecto.NoResultsError if the Activity leader does not exist. Examples iex> get_activity_leader! ( 123 ) % ActivityLeader { } iex> get_activity_leader! ( 456 ) ** (Ecto.NoResultsError)","ref":"Claper.Events.html#get_activity_leader!/1","title":"Claper.Events.get_activity_leader!/1","type":"function"},{"doc":"Gets all facilitators for a given event. Examples iex> get_activity_leaders_for_event! ( event ) [ % ActivityLeader { } , ... ]","ref":"Claper.Events.html#get_activity_leaders_for_event/1","title":"Claper.Events.get_activity_leaders_for_event/1","type":"function"},{"doc":"Get a single event with the same code excluding a specific event. Examples iex> get_different_event_with_code ( "Hello" , 123 ) % Event { }","ref":"Claper.Events.html#get_different_event_with_code/2","title":"Claper.Events.get_different_event_with_code/2","type":"function"},{"doc":"Gets a single event. Raises Ecto.NoResultsError if the Event does not exist. Examples iex> get_event! ( "123e4567-e89b-12d3-a456-426614174000" ) % Event { } iex> get_event! ( "123e4567-e89b-12d3-a456-4266141740111" ) ** (Ecto.NoResultsError)","ref":"Claper.Events.html#get_event!/2","title":"Claper.Events.get_event!/2","type":"function"},{"doc":"Gets a single event by code. Raises Ecto.NoResultsError if the Event does not exist. Examples iex> get_event_with_code! ( "Hello" ) % Event { } iex> get_event_with_code! ( "Old event" ) ** (Ecto.NoResultsError)","ref":"Claper.Events.html#get_event_with_code!/2","title":"Claper.Events.get_event_with_code!/2","type":"function"},{"doc":"","ref":"Claper.Events.html#get_event_with_code/2","title":"Claper.Events.get_event_with_code/2","type":"function"},{"doc":"Gets a single managed event. Raises Ecto.NoResultsError if the Event does not exist. Examples iex> get_managed_event! ( user , "123e4567-e89b-12d3-a456-426614174000" ) % Event { } iex> get_managed_event! ( another_user , "123e4567-e89b-12d3-a456-426614174000" ) ** (Ecto.NoResultsError)","ref":"Claper.Events.html#get_managed_event!/3","title":"Claper.Events.get_managed_event!/3","type":"function"},{"doc":"Gets a single user's event. Raises Ecto.NoResultsError if the Event does not exist. Examples iex> get_user_event! ( user , "123e4567-e89b-12d3-a456-426614174000" ) % Event { } iex> get_user_event! ( another_user , "123e4567-e89b-12d3-a456-426614174000" ) ** (Ecto.NoResultsError)","ref":"Claper.Events.html#get_user_event!/3","title":"Claper.Events.get_user_event!/3","type":"function"},{"doc":"Check if a user is a facilitator of a specific event. Examples iex> is_leaded_by ( "email@example.com" , 123 ) true","ref":"Claper.Events.html#is_leaded_by/2","title":"Claper.Events.is_leaded_by/2","type":"function"},{"doc":"Returns the list of events of a given user. Examples iex> list_events ( 123 ) [ % Event { } , ... ]","ref":"Claper.Events.html#list_events/2","title":"Claper.Events.list_events/2","type":"function"},{"doc":"Returns the list of events managed by a given user email. Examples iex> list_managed_events_by ( "email@example.com" ) [ % Event { } , ... ]","ref":"Claper.Events.html#list_managed_events_by/2","title":"Claper.Events.list_managed_events_by/2","type":"function"},{"doc":"Updates a event. Examples iex> update_event ( event , %{ field : new_value } ) { :ok , % Event { } } iex> update_event ( event , %{ field : bad_value } ) { :error , % Ecto.Changeset { } }","ref":"Claper.Events.html#update_event/2","title":"Claper.Events.update_event/2","type":"function"},{"doc":"","ref":"Claper.Events.ActivityLeader.html","title":"Claper.Events.ActivityLeader","type":"module"},{"doc":"","ref":"Claper.Events.Event.html","title":"Claper.Events.Event","type":"module"},{"doc":"","ref":"Claper.Events.Event.html#create_changeset/2","title":"Claper.Events.Event.create_changeset/2","type":"function"},{"doc":"","ref":"Claper.Events.Event.html#downcase_code/1","title":"Claper.Events.Event.downcase_code/1","type":"function"},{"doc":"","ref":"Claper.Events.Event.html#restart_changeset/1","title":"Claper.Events.Event.restart_changeset/1","type":"function"},{"doc":"","ref":"Claper.Events.Event.html#started?/1","title":"Claper.Events.Event.started?/1","type":"function"},{"doc":"","ref":"Claper.Events.Event.html#subscribe/1","title":"Claper.Events.Event.subscribe/1","type":"function"},{"doc":"","ref":"Claper.Events.Event.html#update_changeset/2","title":"Claper.Events.Event.update_changeset/2","type":"function"},{"doc":"","ref":"ClaperWeb.EventController.html","title":"ClaperWeb.EventController","type":"module"},{"doc":"","ref":"ClaperWeb.EventController.html#attendee_identifier/2","title":"ClaperWeb.EventController.attendee_identifier/2","type":"function"},{"doc":"","ref":"ClaperWeb.EventController.html#slide_generate/2","title":"ClaperWeb.EventController.slide_generate/2","type":"function"},{"doc":"","ref":"ClaperWeb.EventLive.EventCardComponent.html","title":"ClaperWeb.EventLive.EventCardComponent","type":"module"},{"doc":"Callback implementation for Phoenix.LiveComponent.render/1 .","ref":"ClaperWeb.EventLive.EventCardComponent.html#render/1","title":"ClaperWeb.EventLive.EventCardComponent.render/1","type":"function"},{"doc":"","ref":"ClaperWeb.EventLive.FormComponent.html","title":"ClaperWeb.EventLive.FormComponent","type":"module"},{"doc":"","ref":"ClaperWeb.EventLive.FormComponent.html#error_to_string/1","title":"ClaperWeb.EventLive.FormComponent.error_to_string/1","type":"function"},{"doc":"Callback implementation for Phoenix.LiveComponent.render/1 .","ref":"ClaperWeb.EventLive.FormComponent.html#render/1","title":"ClaperWeb.EventLive.FormComponent.render/1","type":"function"},{"doc":"","ref":"ClaperWeb.EventLive.Index.html","title":"ClaperWeb.EventLive.Index","type":"module"},{"doc":"Callback implementation for Phoenix.LiveView.render/1 .","ref":"ClaperWeb.EventLive.Index.html#render/1","title":"ClaperWeb.EventLive.Index.render/1","type":"function"},{"doc":"","ref":"ClaperWeb.EventLive.Join.html","title":"ClaperWeb.EventLive.Join","type":"module"},{"doc":"Callback implementation for Phoenix.LiveView.render/1 .","ref":"ClaperWeb.EventLive.Join.html#render/1","title":"ClaperWeb.EventLive.Join.render/1","type":"function"},{"doc":"","ref":"ClaperWeb.EventLive.Manage.html","title":"ClaperWeb.EventLive.Manage","type":"module"},{"doc":"Callback implementation for Phoenix.LiveView.render/1 .","ref":"ClaperWeb.EventLive.Manage.html#render/1","title":"ClaperWeb.EventLive.Manage.render/1","type":"function"},{"doc":"","ref":"ClaperWeb.EventLive.Manage.html#toggle_add_modal/1","title":"ClaperWeb.EventLive.Manage.toggle_add_modal/1","type":"function"},{"doc":"","ref":"ClaperWeb.EventLive.PollComponent.html","title":"ClaperWeb.EventLive.PollComponent","type":"module"},{"doc":"","ref":"ClaperWeb.EventLive.PollComponent.html#toggle_poll/1","title":"ClaperWeb.EventLive.PollComponent.toggle_poll/1","type":"function"},{"doc":"","ref":"ClaperWeb.EventLive.PostComponent.html","title":"ClaperWeb.EventLive.PostComponent","type":"module"},{"doc":"Callback implementation for Phoenix.LiveComponent.render/1 .","ref":"ClaperWeb.EventLive.PostComponent.html#render/1","title":"ClaperWeb.EventLive.PostComponent.render/1","type":"function"},{"doc":"","ref":"ClaperWeb.EventLive.Presenter.html","title":"ClaperWeb.EventLive.Presenter","type":"module"},{"doc":"Callback implementation for Phoenix.LiveView.render/1 .","ref":"ClaperWeb.EventLive.Presenter.html#render/1","title":"ClaperWeb.EventLive.Presenter.render/1","type":"function"},{"doc":"","ref":"ClaperWeb.EventLive.Show.html","title":"ClaperWeb.EventLive.Show","type":"module"},{"doc":"Callback implementation for Phoenix.LiveView.render/1 .","ref":"ClaperWeb.EventLive.Show.html#render/1","title":"ClaperWeb.EventLive.Show.render/1","type":"function"},{"doc":"","ref":"ClaperWeb.EventLive.Show.html#toggle_side_menu/1","title":"ClaperWeb.EventLive.Show.toggle_side_menu/1","type":"function"},{"doc":"","ref":"ClaperWeb.EventView.html","title":"ClaperWeb.EventView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"ClaperWeb.EventView.html#__resource__/0","title":"ClaperWeb.EventView.__resource__/0","type":"function"},{"doc":"Renders the given template locally.","ref":"ClaperWeb.EventView.html#render/2","title":"ClaperWeb.EventView.render/2","type":"function"},{"doc":"Callback invoked when no template is found. By default it raises but can be customized to render a particular template.","ref":"ClaperWeb.EventView.html#template_not_found/2","title":"ClaperWeb.EventView.template_not_found/2","type":"function"},{"doc":"The Polls context.","ref":"Claper.Polls.html","title":"Claper.Polls","type":"module"},{"doc":"Add an empty poll opt to a poll changeset.","ref":"Claper.Polls.html#add_poll_opt/1","title":"Claper.Polls.add_poll_opt/1","type":"function"},{"doc":"Returns an %Ecto.Changeset{} for tracking poll changes. Examples iex> change_poll ( poll ) % Ecto.Changeset { data : % Poll { } }","ref":"Claper.Polls.html#change_poll/2","title":"Claper.Polls.change_poll/2","type":"function"},{"doc":"Creates a poll. Examples iex> create_poll ( %{ field : value } ) { :ok , % Poll { } } iex> create_poll ( %{ field : bad_value } ) { :error , % Ecto.Changeset { } }","ref":"Claper.Polls.html#create_poll/1","title":"Claper.Polls.create_poll/1","type":"function"},{"doc":"Creates a poll_vote. Examples iex> create_poll_vote ( %{ field : value } ) { :ok , % PollVote { } } iex> create_poll_vote ( %{ field : bad_value } ) { :error , % Ecto.Changeset { } }","ref":"Claper.Polls.html#create_poll_vote/1","title":"Claper.Polls.create_poll_vote/1","type":"function"},{"doc":"Deletes a poll. Examples iex> delete_poll ( "123e4567-e89b-12d3-a456-426614174000" , poll ) { :ok , % Poll { } } iex> delete_poll ( "123e4567-e89b-12d3-a456-426614174000" , poll ) { :error , % Ecto.Changeset { } }","ref":"Claper.Polls.html#delete_poll/2","title":"Claper.Polls.delete_poll/2","type":"function"},{"doc":"Gets a single poll and set percentages for each poll options. Raises Ecto.NoResultsError if the Poll does not exist. Examples iex> get_poll! ( 123 ) % Poll { } iex> get_poll! ( 456 ) ** (Ecto.NoResultsError)","ref":"Claper.Polls.html#get_poll!/1","title":"Claper.Polls.get_poll!/1","type":"function"},{"doc":"Gets a single poll for a given position. Examples iex> get_poll! ( 123 , 0 ) % Poll { }","ref":"Claper.Polls.html#get_poll_current_position/2","title":"Claper.Polls.get_poll_current_position/2","type":"function"},{"doc":"Gets a single poll_vote. Examples iex> get_poll_vote! ( 321 , 123 ) % PollVote { }","ref":"Claper.Polls.html#get_poll_vote/2","title":"Claper.Polls.get_poll_vote/2","type":"function"},{"doc":"Returns the list of polls for a given presentation file. Examples iex> list_polls ( 123 ) [ % Poll { } , ... ]","ref":"Claper.Polls.html#list_polls/1","title":"Claper.Polls.list_polls/1","type":"function"},{"doc":"Returns the list of polls for a given presentation file and a given position. Examples iex> list_polls_at_position ( 123 , 0 ) [ % Poll { } , ... ]","ref":"Claper.Polls.html#list_polls_at_position/2","title":"Claper.Polls.list_polls_at_position/2","type":"function"},{"doc":"Remove a poll opt from a poll changeset.","ref":"Claper.Polls.html#remove_poll_opt/2","title":"Claper.Polls.remove_poll_opt/2","type":"function"},{"doc":"","ref":"Claper.Polls.html#set_default/3","title":"Claper.Polls.set_default/3","type":"function"},{"doc":"Calculate percentage of all poll options for a given poll. Examples iex> set_percentages ( poll ) % Poll { }","ref":"Claper.Polls.html#set_percentages/1","title":"Claper.Polls.set_percentages/1","type":"function"},{"doc":"Updates a poll. Examples iex> update_poll ( "123e4567-e89b-12d3-a456-426614174000" , poll , %{ field : new_value } ) { :ok , % Poll { } } iex> update_poll ( "123e4567-e89b-12d3-a456-426614174000" , poll , %{ field : bad_value } ) { :error , % Ecto.Changeset { } }","ref":"Claper.Polls.html#update_poll/3","title":"Claper.Polls.update_poll/3","type":"function"},{"doc":"","ref":"Claper.Polls.html#vote/4","title":"Claper.Polls.vote/4","type":"function"},{"doc":"","ref":"Claper.Polls.Poll.html","title":"Claper.Polls.Poll","type":"module"},{"doc":"","ref":"Claper.Polls.PollOpt.html","title":"Claper.Polls.PollOpt","type":"module"},{"doc":"","ref":"Claper.Polls.PollVote.html","title":"Claper.Polls.PollVote","type":"module"},{"doc":"","ref":"ClaperWeb.PollLive.FormComponent.html","title":"ClaperWeb.PollLive.FormComponent","type":"module"},{"doc":"Callback implementation for Phoenix.LiveComponent.render/1 .","ref":"ClaperWeb.PollLive.FormComponent.html#render/1","title":"ClaperWeb.PollLive.FormComponent.render/1","type":"function"},{"doc":"The Posts context.","ref":"Claper.Posts.html","title":"Claper.Posts","type":"module"},{"doc":"Creates a post. Examples iex> create_post ( event , %{ field : value } ) { :ok , % Post { } } iex> create_post ( event , %{ field : bad_value } ) { :error , % Ecto.Changeset { } }","ref":"Claper.Posts.html#create_post/2","title":"Claper.Posts.create_post/2","type":"function"},{"doc":"Creates a reaction. Examples iex> create_reaction ( %{ field : value } ) { :ok , % Reaction { } } iex> create_reaction ( %{ field : bad_value } ) { :error , % Ecto.Changeset { } }","ref":"Claper.Posts.html#create_reaction/1","title":"Claper.Posts.create_reaction/1","type":"function"},{"doc":"","ref":"Claper.Posts.html#delete_all_posts/3","title":"Claper.Posts.delete_all_posts/3","type":"function"},{"doc":"Deletes a post. Examples iex> delete_post ( post ) { :ok , % Post { } } iex> delete_post ( post ) { :error , % Ecto.Changeset { } }","ref":"Claper.Posts.html#delete_post/1","title":"Claper.Posts.delete_post/1","type":"function"},{"doc":"Deletes a reaction. Examples iex> delete_reaction ( reaction ) { :ok , % Reaction { } } iex> delete_reaction ( reaction ) { :error , % Ecto.Changeset { } }","ref":"Claper.Posts.html#delete_reaction/1","title":"Claper.Posts.delete_reaction/1","type":"function"},{"doc":"Gets a single post. Raises Ecto.NoResultsError if the Post does not exist. Examples iex> get_post! ( "123e4567-e89b-12d3-a456-426614174000" ) % Post { } iex> get_post! ( "123e4567-e89b-12d3-a456-426614174123" ) ** (Ecto.NoResultsError)","ref":"Claper.Posts.html#get_post!/2","title":"Claper.Posts.get_post!/2","type":"function"},{"doc":"Gets a single reaction. Raises Ecto.NoResultsError if the Reaction does not exist. Examples iex> get_reaction! ( 123 ) % Reaction { } iex> get_reaction! ( 456 ) ** (Ecto.NoResultsError)","ref":"Claper.Posts.html#get_reaction!/1","title":"Claper.Posts.get_reaction!/1","type":"function"},{"doc":"Get event posts","ref":"Claper.Posts.html#list_posts/2","title":"Claper.Posts.list_posts/2","type":"function"},{"doc":"","ref":"Claper.Posts.html#reacted_posts/3","title":"Claper.Posts.reacted_posts/3","type":"function"},{"doc":"Updates a post. Examples iex> update_post ( post , %{ field : new_value } ) { :ok , % Post { } } iex> update_post ( post , %{ field : bad_value } ) { :error , % Ecto.Changeset { } }","ref":"Claper.Posts.html#update_post/2","title":"Claper.Posts.update_post/2","type":"function"},{"doc":"","ref":"Claper.Posts.Post.html","title":"Claper.Posts.Post","type":"module"},{"doc":"","ref":"Claper.Posts.Reaction.html","title":"Claper.Posts.Reaction","type":"module"},{"doc":"","ref":"ClaperWeb.PostController.html","title":"ClaperWeb.PostController","type":"module"},{"doc":"","ref":"ClaperWeb.PostController.html#create/2","title":"ClaperWeb.PostController.create/2","type":"function"},{"doc":"","ref":"ClaperWeb.PostController.html#index/2","title":"ClaperWeb.PostController.index/2","type":"function"},{"doc":"","ref":"ClaperWeb.PostView.html","title":"ClaperWeb.PostView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"ClaperWeb.PostView.html#__resource__/0","title":"ClaperWeb.PostView.__resource__/0","type":"function"},{"doc":"Renders the given template locally.","ref":"ClaperWeb.PostView.html#render/2","title":"ClaperWeb.PostView.render/2","type":"function"},{"doc":"Callback invoked when no template is found. By default it raises but can be customized to render a particular template.","ref":"ClaperWeb.PostView.html#template_not_found/2","title":"ClaperWeb.PostView.template_not_found/2","type":"function"},{"doc":"Claper turns your presentations into an interactive, engaging and exciting experience. Claper has a two-sided mission: The first one is to help these people presenting an idea or a message by giving them the opportunity to make their presentation unique and to have real-time feedback from their audience. The second one is to help each participant to take their place, to be an actor in the presentation, in the meeting and to feel important and useful.","ref":"overview.html","title":"Overview","type":"extras"},{"doc":"","ref":"configuration.html","title":"Configuration","type":"extras"},{"doc":"All configuration used by the app is stored in the .env file. You can find an example file in .env.sample , but you should copy it to .env and fill it with your own values (described below). Variable Values Default Required Description PRESENTATION_STORAGE local, s3 local - Define where the presentation files will be stored AWS_ACCESS_KEY_ID - - only for s3 Your AWS Access Key ID AWS_SECRET_ACCESS_KEY - - only for s3 Your AWS Secret Access Key AWS_S3_BUCKET - - only for s3 The name of the bucket where the presentation files will be stored AWS_S3_REGION - - only for s3 The region where the bucket is located MAIL_TRANSPORT local, smtp local - Define how the emails will be sent MAIL_FROM - noreply@claper.co - Email address used to send emails MAIL_FROM_NAME - Claper - Name used to send emails SMTP_RELAY - - ✓ SMTP relay server SMTP_USERNAME - - ✓ SMTP username SMTP_PASSWORD - - ✓ SMTP password SMTP_PORT - 25 - SMTP port SMTP_TLS always, never, if_available always - SMTP TLS SMTP_AUTH always, never, if_available always - SMTP Auth SMTP_SSL true, false true - SMTP SSL","ref":"configuration.html#environment-file","title":"Configuration - Environment file","type":"extras"},{"doc":"You can use all local variables plus the following: Variable Values Default Required Description DATABASE_URL - - ✓ Postgres connection string SECRET_KEY_BASE - - ✓ Generate it with mix phx.gen.secret ENDPOINT_HOST - localhost - Host used to access the app (used for url generation) ENDPOINT_PORT - 80 - Port used to access the app (used for url generation) PORT - 4000 - Port to listen to","ref":"configuration.html#production-docker","title":"Configuration - Production / Docker","type":"extras"},{"doc":"","ref":"installation.html","title":"Installation","type":"extras"},{"doc":"To run Claper on your local environment you need to have: Postgres >= 9 Elixir >= 1.13.2 Erland >= 24 NPM >= 6.14.17 NodeJS >= 14.19.2 Ghostscript >= 9.5.0 (for PDF support) Libreoffice >= 6.4 (for PPT/PPTX support) You can also use Docker to easily run a Postgres instance: docker run -p 5432:5432 -e POSTGRES_PASSWORD=claper -e POSTGRES_USER=claper -e POSTGRES_DB=claper --name claper-db -d postgres:9 Clone the repo git clone https://github.com/ClaperCo/Claper.git Install dependencies mix deps.get Migrate your database mix ecto.migrate Install JS dependencies cd assets && npm i Allow execution of startup file chmod +x ./start.sh Start Phoenix endpoint with ./start.sh Now you can visit localhost:4000 from your browser. If you have configured MAIL to local , you can access to the mailbox at localhost:4000/dev/mailbox .","ref":"installation.html#prerequisites","title":"Installation - Prerequisites","type":"extras"},{"doc":"You can build the app with Docker: docker build -t claper . docker run -p 4000:4000 -d claper","ref":"installation.html#using-docker","title":"Installation - Using Docker","type":"extras"},{"doc":"Claper is passwordless, so you don't have to create an account. Just login with your email, check your mailbox ( localhost:4000/dev/mailbox if you have configured mail to be in local) and click on the link to get connected.","ref":"authentication.html","title":"Authentication","type":"extras"}] \ No newline at end of file diff --git a/search.html b/search.html index b779737..396122e 100644 --- a/search.html +++ b/search.html @@ -103,7 +103,7 @@ Claper
- +