feat: Add Embed #61 (#72)

This commit is contained in:
Dhanus
2023-11-23 16:36:39 +05:30
committed by GitHub
parent c4b91b0a0a
commit d3989068a2
26 changed files with 1627 additions and 284 deletions

189
lib/claper/embeds.ex Normal file
View File

@@ -0,0 +1,189 @@
defmodule Claper.Embeds do
@moduledoc """
The Embeds context.
"""
import Ecto.Query, warn: false
alias Claper.Repo
alias Claper.Embeds.Embed
@doc """
Returns the list of embeds for a given presentation file.
## Examples
iex> list_embeds(123)
[%Embed{}, ...]
"""
def list_embeds(presentation_file_id) do
from(e in Embed,
where: e.presentation_file_id == ^presentation_file_id,
order_by: [asc: e.id, asc: e.position]
)
|> Repo.all()
end
@doc """
Returns the list of embeds for a given presentation file and a given position.
## Examples
iex> list_embeds_at_position(123, 0)
[%Embed{}, ...]
"""
def list_embeds_at_position(presentation_file_id, position) do
from(e in Embed,
where: e.presentation_file_id == ^presentation_file_id and e.position == ^position,
order_by: [asc: e.id]
)
|> Repo.all()
end
@doc """
Gets a single embed.
Raises `Ecto.NoResultsError` if the Embed does not exist.
## Examples
iex> get_embed!(123)
%Embed{}
iex> get_embed!(456)
** (Ecto.NoResultsError)
"""
def get_embed!(id, preload \\ []),
do: Repo.get!(Embed, id) |> Repo.preload(preload)
@doc """
Gets a single embed for a given position.
## Examples
iex> get_embed_current_position(123, 0)
%Embed{}
"""
def get_embed_current_position(presentation_file_id, position) do
from(e in Embed,
where:
e.position == ^position and e.presentation_file_id == ^presentation_file_id and
e.enabled == true
)
|> Repo.one()
end
@doc """
Creates a embed.
## Examples
iex> create_embed(%{field: value})
{:ok, %Embed{}}
iex> create_embed(%{field: bad_value})
{:error, %Ecto.Changeset{}}
"""
def create_embed(attrs \\ %{}) do
%Embed{}
|> Embed.changeset(attrs)
|> Repo.insert()
end
@doc """
Updates a embed.
## Examples
iex> update_embed("123e4567-e89b-12d3-a456-426614174000", embed, %{field: new_value})
{:ok, %Embed{}}
iex> update_embed("123e4567-e89b-12d3-a456-426614174000", embed, %{field: bad_value})
{:error, %Ecto.Changeset{}}
"""
def update_embed(event_uuid, %Embed{} = embed, attrs) do
embed
|> Embed.changeset(attrs)
|> Repo.update()
|> case do
{:ok, embed} ->
broadcast({:ok, embed, event_uuid}, :embed_updated)
{:error, changeset} ->
{:error, %{changeset | action: :update}}
end
end
@doc """
Deletes a embed.
## Examples
iex> delete_embed("123e4567-e89b-12d3-a456-426614174000", embed)
{:ok, %Embed{}}
iex> delete_embed("123e4567-e89b-12d3-a456-426614174000", embed)
{:error, %Ecto.Changeset{}}
"""
def delete_embed(event_uuid, %Embed{} = embed) do
{:ok, embed} = Repo.delete(embed)
broadcast({:ok, embed, event_uuid}, :embed_deleted)
end
@doc """
Returns an `%Ecto.Changeset{}` for tracking embed changes.
## Examples
iex> change_embed(embed)
%Ecto.Changeset{data: %Embed{}}
"""
def change_embed(%Embed{} = embed, attrs \\ %{}) do
Embed.changeset(embed, attrs)
end
def disable_all(presentation_file_id, position) do
from(e in Embed,
where: e.presentation_file_id == ^presentation_file_id and e.position == ^position
)
|> Repo.update_all(set: [enabled: false])
end
def set_status(id, presentation_file_id, position, status) do
if status do
from(e in Embed,
where:
e.presentation_file_id == ^presentation_file_id and e.position == ^position and
e.id != ^id
)
|> Repo.update_all(set: [enabled: false])
end
from(e in Embed,
where:
e.presentation_file_id == ^presentation_file_id and e.position == ^position and
e.id == ^id
)
|> Repo.update_all(set: [enabled: status])
end
defp broadcast({:error, _reason} = error, _embed), do: error
defp broadcast({:ok, embed, event_uuid}, event) do
Phoenix.PubSub.broadcast(
Claper.PubSub,
"event:#{event_uuid}",
{event, embed}
)
{:ok, embed}
end
end

View File

@@ -0,0 +1,38 @@
defmodule Claper.Embeds.Embed do
use Ecto.Schema
import Ecto.Changeset
@derive {Jason.Encoder, only: [:title, :content, :position, :attendee_visibility]}
schema "embeds" do
field :title, :string
field :content, :string
field :enabled, :boolean, default: true
field :position, :integer, default: 0
field :attendee_visibility, :boolean, default: false
belongs_to :presentation_file, Claper.Presentations.PresentationFile
timestamps()
end
@doc false
def changeset(embed, attrs \\ %{}) do
embed
|> cast(attrs, [
:enabled,
:title,
:content,
:presentation_file_id,
:position,
:attendee_visibility
])
|> validate_required([
:title,
:content,
:presentation_file_id,
:position,
:attendee_visibility
])
|> validate_format(:content, ~r/<iframe.*<\/iframe>/, message: "Invalid embed format")
end
end

View File

@@ -275,11 +275,12 @@ defmodule Claper.Events do
|> Ecto.Multi.run(:from_event, fn _repo, _changes ->
{:ok,
get_user_event!(user_id, from_event_uuid,
presentation_file: [polls: [:poll_opts], forms: []]
presentation_file: [polls: [:poll_opts], forms: [], embeds: []]
)}
end)
|> Ecto.Multi.run(:to_event, fn _repo, _changes ->
{:ok, get_user_event!(user_id, to_event_uuid, presentation_file: [:polls, :forms])}
{:ok,
get_user_event!(user_id, to_event_uuid, presentation_file: [:polls, :forms, :embeds])}
end)
|> Ecto.Multi.run(:polls, fn _repo, %{from_event: from_event, to_event: to_event} ->
{:ok,
@@ -321,6 +322,22 @@ defmodule Claper.Events do
end
end)}
end)
|> Ecto.Multi.run(:embeds, fn _repo, %{from_event: from_event, to_event: to_event} ->
{:ok,
from_event.presentation_file.embeds
|> Enum.each(fn embed ->
if embed.position < to_event.presentation_file.length do
Claper.Embeds.create_embed(%{
title: embed.title,
content: embed.content,
position: embed.position,
enabled: embed.enabled,
attendee_visibility: embed.attendee_visibility,
presentation_file_id: to_event.presentation_file.id
})
end
end)}
end)
|> Repo.transaction() do
{:ok, %{to_event: to_event}} -> {:ok, to_event}
end

View File

@@ -181,20 +181,22 @@ defmodule Claper.Forms do
|> Repo.update_all(set: [enabled: false])
end
def set_default(id, presentation_file_id, position) do
from(f in Form,
where:
f.presentation_file_id == ^presentation_file_id and f.position == ^position and
f.id != ^id
)
|> Repo.update_all(set: [enabled: false])
def set_status(id, presentation_file_id, position, status) do
if status do
from(f in Form,
where:
f.presentation_file_id == ^presentation_file_id and f.position == ^position and
f.id != ^id
)
|> Repo.update_all(set: [enabled: false])
end
from(f in Form,
where:
f.presentation_file_id == ^presentation_file_id and f.position == ^position and
f.id == ^id
)
|> Repo.update_all(set: [enabled: true])
|> Repo.update_all(set: [enabled: status])
end
defp broadcast({:error, _reason} = error, _form), do: error

View File

@@ -275,20 +275,22 @@ defmodule Claper.Polls do
|> Repo.update_all(set: [enabled: false])
end
def set_default(id, presentation_file_id, position) do
from(p in Poll,
where:
p.presentation_file_id == ^presentation_file_id and p.position == ^position and
p.id != ^id
)
|> Repo.update_all(set: [enabled: false])
def set_status(id, presentation_file_id, position, status) do
if status do
from(p in Poll,
where:
p.presentation_file_id == ^presentation_file_id and p.position == ^position and
p.id != ^id
)
|> Repo.update_all(set: [enabled: false])
end
from(p in Poll,
where:
p.presentation_file_id == ^presentation_file_id and p.position == ^position and
p.id == ^id
)
|> Repo.update_all(set: [enabled: true])
|> Repo.update_all(set: [enabled: status])
end
defp broadcast({:error, _reason} = error, _poll), do: error

View File

@@ -10,6 +10,7 @@ defmodule Claper.Presentations.PresentationFile do
belongs_to :event, Claper.Events.Event
has_many :polls, Claper.Polls.Poll
has_many :forms, Claper.Forms.Form
has_many :embeds, Claper.Embeds.Embed
has_one :presentation_state, Claper.Presentations.PresentationState, on_replace: :delete
timestamps()

View File

@@ -0,0 +1,92 @@
defmodule ClaperWeb.EmbedLive.FormComponent do
use ClaperWeb, :live_component
alias Claper.Embeds
@impl true
def update(%{embed: embed} = assigns, socket) do
changeset = Embeds.change_embed(embed)
{:ok,
socket
|> assign(assigns)
|> assign_new(:dark, fn -> false end)
|> assign(:embeds, list_embeds(assigns))
|> assign(:changeset, changeset)}
end
@impl true
def handle_event("delete", %{"id" => id}, socket) do
embed = Embeds.get_embed!(id)
{:ok, _} = Embeds.delete_embed(socket.assigns.event_uuid, embed)
{:noreply, socket |> push_redirect(to: socket.assigns.return_to)}
end
@impl true
def handle_event("validate", %{"embed" => embed_params}, socket) do
changeset =
socket.assigns.embed
|> Embeds.change_embed(embed_params)
|> Map.put(:action, :validate)
{:noreply, socket |> assign(:changeset, changeset)}
end
@impl true
def handle_event("save", %{"embed" => embed_params}, socket) do
save_embed(socket, socket.assigns.live_action, embed_params)
end
defp save_embed(socket, :edit, embed_params) do
case Embeds.update_embed(
socket.assigns.event_uuid,
socket.assigns.embed,
embed_params
) do
{:ok, _embed} ->
{:noreply,
socket
|> push_redirect(to: socket.assigns.return_to)}
{:error, %Ecto.Changeset{} = changeset} ->
{:noreply, assign(socket, :changeset, changeset)}
end
end
defp save_embed(socket, :new, embed_params) do
case Embeds.create_embed(
embed_params
|> Map.put("presentation_file_id", socket.assigns.presentation_file.id)
|> Map.put("position", socket.assigns.position)
|> Map.put("enabled", false)
) do
{:ok, embed} ->
{:noreply,
socket
|> maybe_change_current_embed(embed)
|> push_redirect(to: socket.assigns.return_to)}
{:error, %Ecto.Changeset{} = changeset} ->
{:noreply, assign(socket, changeset: changeset)}
end
end
defp maybe_change_current_embed(socket, %{enabled: true} = embed) do
embed = Embeds.get_embed!(embed.id)
Phoenix.PubSub.broadcast(
Claper.PubSub,
"event:#{socket.assigns.event_uuid}",
{:current_embed, embed}
)
socket
end
defp maybe_change_current_embed(socket, _), do: socket
defp list_embeds(assigns) do
Embeds.list_embeds(assigns.presentation_file.id)
end
end

View File

@@ -0,0 +1,64 @@
<div>
<.form
:let={f}
for={@changeset}
id="embed-form"
phx-target={@myself}
phx-change="validate"
phx-submit="save"
>
<div class="my-3 mb-10">
<ClaperWeb.Component.Input.text
form={f}
key={:title}
name={gettext("Title of your embed")}
labelClass={if @dark, do: "text-white"}
fieldClass={if @dark, do: "bg-gray-700 text-white"}
autofocus="true"
required="true"
/>
<ClaperWeb.Component.Input.textarea
form={f}
key={:content}
name={gettext("Content of your embed")}
labelClass={if @dark, do: "text-white"}
fieldClass={if @dark, do: "bg-gray-700 text-white"}
autofocus="true"
required="true"
/>
<div class="flex gap-x-2 mb-5 mt-3">
<%= checkbox(f, :attendee_visibility, class: "h-4 w-5") %>
<%= label(f, :attendee_visibility, gettext("Attendee can access the embed on the device"),
class: "text-sm font-medium"
) %>
</div>
</div>
<div class="flex space-x-3">
<button
type="submit"
phx_disable_with="Loading..."
class="w-full lg:w-auto px-6 text-white py-2 rounded-md tracking-wide font-bold focus:outline-none focus:shadow-outline bg-gradient-to-tl from-primary-500 to-secondary-500 bg-size-200 bg-pos-0 hover:bg-pos-100 transition-all duration-500"
>
<%= case @live_action do
:new -> gettext("Create")
:edit -> gettext("Save")
end %>
</button>
<%= if @live_action == :edit do %>
<%= link(gettext("Delete"),
to: "#",
phx_click: "delete",
phx_target: @myself,
phx_value_id: @embed.id,
data: [
confirm: gettext("This will delete the embed, are you sure?")
],
class:
"w-full lg:w-auto px-6 text-center text-white py-2 rounded-md tracking-wide font-bold focus:outline-none focus:shadow-outline bg-gradient-to-tl from-supporting-red-600 to-supporting-red-400 bg-size-200 bg-pos-0 hover:bg-pos-100 transition-all duration-500"
) %>
<% end %>
</div>
</.form>
</div>

View File

@@ -0,0 +1,84 @@
defmodule ClaperWeb.EventLive.EmbedComponent do
use ClaperWeb, :live_component
@impl true
def render(assigns) do
~H"""
<div>
<div
id="collapsed-embed"
class="bg-black py-3 px-6 text-black shadow-lg mx-auto rounded-full w-max hidden"
>
<div
class="block w-full h-full cursor-pointer"
phx-click={toggle_embed()}
phx-target={@myself}
>
<div class="text-white flex space-x-2 items-center">
<svg
xmlns="http://www.w3.org/2000/svg"
class="h-6 w-6"
viewBox="0 0 24 24"
stroke-width="1.5"
stroke="currentColor"
fill="none"
stroke-linecap="round"
stroke-linejoin="round"
>
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path d="M12 3a3 3 0 0 0 -3 3v12a3 3 0 0 0 3 3"></path>
<path d="M6 3a3 3 0 0 1 3 3v12a3 3 0 0 1 -3 3"></path>
<path d="M13 7h7a1 1 0 0 1 1 1v8a1 1 0 0 1 -1 1h-7"></path>
<path d="M5 7h-1a1 1 0 0 0 -1 1v8a1 1 0 0 0 1 1h1"></path>
<path d="M17 12h.01"></path>
<path d="M13 12h.01"></path>
</svg>
<span class="font-bold"><%= gettext("See current embed") %></span>
</div>
</div>
</div>
<div id="extended-embed" class="bg-black w-full py-3 px-6 text-black shadow-lg rounded-md">
<div
class="block w-full h-full cursor-pointer"
phx-click={toggle_embed()}
phx-target={@myself}
>
<div id="embed-pane" class="float-right mt-2">
<svg
xmlns="http://www.w3.org/2000/svg"
class="h-8 w-8 text-white"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
stroke-width="2"
>
<path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12" />
</svg>
</div>
<p class="text-xs text-gray-500 my-1"><%= gettext("Current embed") %></p>
<p class="text-white text-lg font-semibold mb-4"><%= @embed.title %></p>
</div>
<div class="flex flex-col space-y-3">
<%= raw(@embed.content) %>
</div>
</div>
</div>
"""
end
def toggle_embed(js \\ %JS{}) do
js
|> JS.toggle(
out: "animate__animated animate__zoomOut",
in: "animate__animated animate__zoomIn",
to: "#collapsed-embed",
time: 50
)
|> JS.toggle(
out: "animate__animated animate__zoomOut",
in: "animate__animated animate__zoomIn",
to: "#extended-embed"
)
end
end

View File

@@ -4,6 +4,7 @@ defmodule ClaperWeb.EventLive.Manage do
alias ClaperWeb.Presence
alias Claper.Polls
alias Claper.Forms
alias Claper.Embeds
@impl true
def mount(%{"code" => code}, session, socket) do
@@ -43,6 +44,7 @@ defmodule ClaperWeb.EventLive.Manage do
|> assign(:posts, list_posts(socket, event.uuid))
|> assign(:polls, list_polls(socket, event.presentation_file.id))
|> assign(:forms, list_forms(socket, event.presentation_file.id))
|> assign(:embeds, list_embeds(socket, event.presentation_file.id))
|> assign(:create, nil)
|> assign(:list_tab, :posts)
|> assign(:create_action, :new)
@@ -52,6 +54,7 @@ defmodule ClaperWeb.EventLive.Manage do
})
|> poll_at_position(false)
|> form_at_position(false)
|> embed_at_position(false)
{:ok, socket, temporary_assigns: [posts: [], form_submits: []]}
end
@@ -128,6 +131,21 @@ defmodule ClaperWeb.EventLive.Manage do
{:noreply, socket |> assign(:current_poll, poll)}
end
@impl true
def handle_info({:embed_updated, embed}, socket) do
{:noreply,
socket
|> update(:current_embed, fn _current_embed -> embed end)}
end
@impl true
def handle_info(
{:current_embed, embed},
socket
) do
{:noreply, socket |> assign(:current_embed, embed)}
end
@impl true
def handle_info(_, socket) do
{:noreply, socket}
@@ -159,7 +177,8 @@ defmodule ClaperWeb.EventLive.Manage do
socket
|> assign(:state, new_state)
|> poll_at_position
|> form_at_position}
|> form_at_position
|> embed_at_position}
end
@impl true
@@ -185,13 +204,15 @@ defmodule ClaperWeb.EventLive.Manage do
end
end
def handle_event("poll-set-default", %{"id" => id}, socket) do
def handle_event("poll-set-active", %{"id" => id}, socket) do
Forms.disable_all(socket.assigns.event.presentation_file.id, socket.assigns.state.position)
Embeds.disable_all(socket.assigns.event.presentation_file.id, socket.assigns.state.position)
Polls.set_default(
Polls.set_status(
id,
socket.assigns.event.presentation_file.id,
socket.assigns.state.position
socket.assigns.state.position,
true
)
poll = Polls.get_poll!(id)
@@ -208,19 +229,28 @@ defmodule ClaperWeb.EventLive.Manage do
{:current_form, nil}
)
Phoenix.PubSub.broadcast(
Claper.PubSub,
"event:#{socket.assigns.event.uuid}",
{:current_embed, nil}
)
{:noreply,
socket
|> assign(:polls, list_polls(socket, socket.assigns.event.presentation_file.id))
|> assign(:forms, list_forms(socket, socket.assigns.event.presentation_file.id))}
|> assign(:forms, list_forms(socket, socket.assigns.event.presentation_file.id))
|> assign(:embeds, list_embeds(socket, socket.assigns.event.presentation_file.id))}
end
def handle_event("form-set-default", %{"id" => id}, socket) do
def handle_event("form-set-active", %{"id" => id}, socket) do
Polls.disable_all(socket.assigns.event.presentation_file.id, socket.assigns.state.position)
Embeds.disable_all(socket.assigns.event.presentation_file.id, socket.assigns.state.position)
Forms.set_default(
Forms.set_status(
id,
socket.assigns.event.presentation_file.id,
socket.assigns.state.position
socket.assigns.state.position,
true
)
form = Forms.get_form!(id)
@@ -237,12 +267,114 @@ defmodule ClaperWeb.EventLive.Manage do
{:current_poll, nil}
)
Phoenix.PubSub.broadcast(
Claper.PubSub,
"event:#{socket.assigns.event.uuid}",
{:current_embed, nil}
)
{:noreply,
socket
|> assign(:polls, list_polls(socket, socket.assigns.event.presentation_file.id))
|> assign(:forms, list_forms(socket, socket.assigns.event.presentation_file.id))
|> assign(:embeds, list_embeds(socket, socket.assigns.event.presentation_file.id))}
end
def handle_event("embed-set-active", %{"id" => id}, socket) do
Polls.disable_all(socket.assigns.event.presentation_file.id, socket.assigns.state.position)
Forms.disable_all(socket.assigns.event.presentation_file.id, socket.assigns.state.position)
Embeds.set_status(
id,
socket.assigns.event.presentation_file.id,
socket.assigns.state.position,
true
)
embed = Embeds.get_embed!(id)
Phoenix.PubSub.broadcast(
Claper.PubSub,
"event:#{socket.assigns.event.uuid}",
{:current_embed, embed}
)
Phoenix.PubSub.broadcast(
Claper.PubSub,
"event:#{socket.assigns.event.uuid}",
{:current_poll, nil}
)
Phoenix.PubSub.broadcast(
Claper.PubSub,
"event:#{socket.assigns.event.uuid}",
{:current_form, nil}
)
{:noreply,
socket
|> assign(:polls, list_polls(socket, socket.assigns.event.presentation_file.id))
|> assign(:forms, list_forms(socket, socket.assigns.event.presentation_file.id))
|> assign(:embeds, list_embeds(socket, socket.assigns.event.presentation_file.id))}
end
def handle_event("poll-set-inactive", %{"id" => id}, socket) do
Polls.set_status(
id,
socket.assigns.event.presentation_file.id,
socket.assigns.state.position,
false
)
Phoenix.PubSub.broadcast(
Claper.PubSub,
"event:#{socket.assigns.event.uuid}",
{:current_poll, nil}
)
{:noreply,
socket
|> assign(:polls, list_polls(socket, socket.assigns.event.presentation_file.id))}
end
def handle_event("form-set-inactive", %{"id" => id}, socket) do
Forms.set_status(
id,
socket.assigns.event.presentation_file.id,
socket.assigns.state.position,
false
)
Phoenix.PubSub.broadcast(
Claper.PubSub,
"event:#{socket.assigns.event.uuid}",
{:current_form, nil}
)
{:noreply,
socket
|> assign(:forms, list_forms(socket, socket.assigns.event.presentation_file.id))}
end
def handle_event("embed-set-inactive", %{"id" => id}, socket) do
Embeds.set_status(
id,
socket.assigns.event.presentation_file.id,
socket.assigns.state.position,
false
)
Phoenix.PubSub.broadcast(
Claper.PubSub,
"event:#{socket.assigns.event.uuid}",
{:current_embed, nil}
)
{:noreply,
socket
|> assign(:embeds, list_embeds(socket, socket.assigns.event.presentation_file.id))}
end
@impl true
def handle_event(
"ban",
@@ -459,6 +591,12 @@ defmodule ClaperWeb.EventLive.Manage do
})
end
defp apply_action(socket, :add_embed, _params) do
socket
|> assign(:create, "embed")
|> assign(:embed, %Embeds.Embed{})
end
defp apply_action(socket, :import, _params) do
socket
|> assign(:create, "import")
@@ -474,6 +612,15 @@ defmodule ClaperWeb.EventLive.Manage do
|> assign(:form, form)
end
defp apply_action(socket, :edit_embed, %{"id" => id}) do
embed = Embeds.get_embed!(id)
socket
|> assign(:create, "embed")
|> assign(:create_action, :edit)
|> assign(:embed, embed)
end
defp poll_at_position(
%{assigns: %{event: event, state: state}} = socket,
broadcast \\ true
@@ -516,6 +663,27 @@ defmodule ClaperWeb.EventLive.Manage do
end
end
defp embed_at_position(
%{assigns: %{event: event, state: state}} = socket,
broadcast \\ true
) do
with embed <-
Claper.Embeds.get_embed_current_position(
event.presentation_file.id,
state.position
) do
if broadcast do
Phoenix.PubSub.broadcast(
Claper.PubSub,
"event:#{event.uuid}",
{:current_embed, embed}
)
end
socket |> assign(:current_embed, embed)
end
end
defp ban(user, %{assigns: %{event: event, state: state}} = socket) do
{:ok, new_state} =
Claper.Presentations.update_presentation_state(state, %{
@@ -543,6 +711,10 @@ defmodule ClaperWeb.EventLive.Manage do
Claper.Forms.list_forms(presentation_file_id)
end
defp list_embeds(_socket, presentation_file_id) do
Claper.Embeds.list_embeds(presentation_file_id)
end
defp list_form_submits(_socket, presentation_file_id) do
Claper.Forms.list_form_submits(presentation_file_id)
end

View File

@@ -215,6 +215,37 @@
</div>
</a>
</li>
<li id="option-3" role="option" tabindex="-1">
<a
data-phx-link="patch"
data-phx-link-state="push"
href={Routes.event_manage_path(@socket, :add_embed, @event.code)}
class="group flex select-none rounded-xl p-3 w-full hover:bg-gray-200 cursor-pointer"
>
<div class="flex h-12 w-12 flex-none text-white items-center justify-center rounded-lg bg-gradient-to-br from-primary-500 to-secondary-500">
<svg
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke-width="1.5"
stroke="currentColor"
class="w-6 h-6"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
d="M14.25 9.75L16.5 12l-2.25 2.25m-4.5 0L7.5 12l2.25-2.25M6 20.25h12A2.25 2.25 0 0020.25 18V6A2.25 2.25 0 0018 3.75H6A2.25 2.25 0 003.75 6v12A2.25 2.25 0 006 20.25z"
/>
</svg>
</div>
<div class="ml-4 flex-auto text-left">
<p class="font-medium text-gray-700"><%= gettext("Embeded") %></p>
<p class="text-gray-500">
<%= gettext("Add a Youtube video or any web content.") %>
</p>
</div>
</a>
</li>
</ul>
<%= if (length @polls) == 0 && (length @forms) == 0 do %>
@@ -290,6 +321,27 @@
</div>
<% end %>
<%= if @create == "embed" do %>
<div class="scroll-py-3 overflow-y-auto bg-gray-100 p-3">
<p class="text-xl font-bold">
<%= case @create_action do
:new -> gettext("New Embed")
:edit -> gettext("Edit Embed")
end %>
</p>
<.live_component
module={ClaperWeb.EmbedLive.FormComponent}
id="embed-create"
event_uuid={@event.uuid}
presentation_file={@event.presentation_file}
embed={@embed}
live_action={@create_action}
position={@state.position}
return_to={Routes.event_manage_path(@socket, :show, @event.code)}
/>
</div>
<% end %>
<%= if @create == "import" do %>
<div class="scroll-py-3 overflow-y-auto bg-gray-100 p-3">
<p class="text-xl font-bold"><%= gettext("Select presentation") %></p>
@@ -396,7 +448,11 @@
</span>
<%= if @state.position == index do %>
<%= if poll.enabled do %>
<span class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-supporting-green-100 text-supporting-green-800">
<button
phx-click="poll-set-inactive"
phx-value-id={poll.id}
class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-supporting-green-100 text-supporting-green-800"
>
<svg
style="--animate-duration: 10s;"
class="mr-1.5 h-2 w-2 text-supporting-green-400 animate__animated animate__flash animate__infinite"
@@ -406,10 +462,10 @@
<circle cx="4" cy="4" r="3" />
</svg>
<%= gettext("Active") %>
</span>
</button>
<% else %>
<button
phx-click="poll-set-default"
phx-click="poll-set-active"
phx-value-id={poll.id}
class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-primary-100 text-primary-800"
>
@@ -472,7 +528,11 @@
</span>
<%= if @state.position == index do %>
<%= if form.enabled do %>
<span class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-supporting-green-100 text-supporting-green-800">
<button
phx-click="form-set-inactive"
phx-value-id={form.id}
class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-supporting-green-100 text-supporting-green-800"
>
<svg
style="--animate-duration: 10s;"
class="mr-1.5 h-2 w-2 text-supporting-green-400 animate__animated animate__flash animate__infinite"
@@ -482,10 +542,10 @@
<circle cx="4" cy="4" r="3" />
</svg>
<%= gettext("Active") %>
</span>
</button>
<% else %>
<button
phx-click="form-set-default"
phx-click="form-set-active"
phx-value-id={form.id}
class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-primary-100 text-primary-800"
>
@@ -518,6 +578,82 @@
</div>
<div class="h-10 border border-gray-300"></div>
<% end %>
<%= for embed<- Enum.filter(@embeds, fn embed -> embed.position == index end) do %>
<div class="flex space-x-2 items-center">
<div class="flex h-10 w-10 flex-none text-white items-center justify-center rounded-lg bg-gradient-to-br from-primary-500 to-secondary-500">
<svg
xmlns="http://www.w3.org/2000/svg"
class="h-6 w-6"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
stroke-width="2"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
d="M14.25 9.75L16.5 12l-2.25 2.25m-4.5 0L7.5 12l2.25-2.25M6 20.25h12A2.25 2.25 0 0020.25 18V6A2.25 2.25 0 0018 3.75H6A2.25 2.25 0 003.75 6v12A2.25 2.25 0 006 20.25z"
/>
</svg>
</div>
<div class="flex space-x-2">
<span>
<span class="font-semibold"><%= gettext "Embed" %></span>: <%= embed.title %>
</span>
<%= if @state.position == index do %>
<%= if embed.enabled do %>
<button
phx-click="embed-set-inactive"
phx-value-id={embed.id}
class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-supporting-green-100 text-supporting-green-800"
>
<svg
style="--animate-duration: 10s;"
class="mr-1.5 h-2 w-2 text-supporting-green-400 animate__animated animate__flash animate__infinite"
fill="currentColor"
viewBox="0 0 8 8"
>
<circle cx="4" cy="4" r="3" />
</svg>
<%= gettext("Active") %>
</button>
<% else %>
<button
phx-click="embed-set-active"
phx-value-id={embed.id}
class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-primary-100 text-primary-800"
>
<%= gettext("Set active") %>
</button>
<% end %>
<a
data-phx-link="patch"
data-phx-link-state="push"
href={
Routes.event_manage_path(@socket, :edit_embed, @event.code, embed.id)
}
class="text-xs text-primary-500"
>
<svg
xmlns="http://www.w3.org/2000/svg"
class="h-5 w-5"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
stroke-width="2"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
d="M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z"
/>
</svg>
</a>
<% end %>
</div>
</div>
<div class="h-10 border border-gray-300"></div>
<% end %>
</div>
<%= if @state.position == index do %>
@@ -773,7 +909,7 @@
<ClaperWeb.Component.Input.check
key={:join_screen_visible}
checked={@state.join_screen_visible}
shortcut="Q"
shortcut={if @create == nil, do: "Q", else: nil}
/>
<span><%= gettext("Show instructions") %><code class="pl-1">(Q)</code></span>
</div>
@@ -782,7 +918,7 @@
<ClaperWeb.Component.Input.check
key={:chat_visible}
checked={@state.chat_visible}
shortcut="W"
shortcut={if @create == nil, do: "W", else: nil}
/>
<span><%= gettext("Show messages") %><code class="pl-1">(W)</code></span>
</div>
@@ -792,7 +928,7 @@
key={:poll_visible}
disabled={!@current_poll}
checked={@state.poll_visible}
shortcut="E"
shortcut={if @create == nil, do: "E", else: nil}
/>
<span><%= gettext("Show poll results") %><code class="pl-1">(E)</code></span>
</div>
@@ -805,7 +941,7 @@
<ClaperWeb.Component.Input.check
key={:chat_enabled}
checked={@state.chat_enabled}
shortcut="A"
shortcut={if @create == nil, do: "A", else: nil}
/>
<span><%= gettext("Enable messages") %><code class="pl-1">(A)</code></span>
</div>
@@ -814,7 +950,7 @@
<ClaperWeb.Component.Input.check
key={:anonymous_chat_enabled}
checked={@state.anonymous_chat_enabled}
shortcut="S"
shortcut={if @create == nil, do: "S", else: nil}
/>
<span>
<%= gettext("Enable anonymous messages") %><code class="pl-1">(S)</code>

View File

@@ -49,6 +49,7 @@ defmodule ClaperWeb.EventLive.Presenter do
|> assign(:reacts, [])
|> poll_at_position
|> form_at_position
|> embed_at_position
{:ok, socket, temporary_assigns: [posts: []]}
end
@@ -80,7 +81,8 @@ defmodule ClaperWeb.EventLive.Presenter do
|> assign(:state, state)
|> push_event("page", %{current_page: state.position})
|> push_event("reset-global-react", %{})
|> poll_at_position}
|> poll_at_position
|> embed_at_position}
end
@impl true
@@ -105,9 +107,15 @@ defmodule ClaperWeb.EventLive.Presenter do
@impl true
def handle_info({:poll_updated, poll}, socket) do
{:noreply,
socket
|> update(:current_poll, fn _current_poll -> poll end)}
if poll.enabled do
{:noreply,
socket
|> update(:current_poll, fn _current_poll -> poll end)}
else
{:noreply,
socket
|> update(:current_poll, fn _current_poll -> nil end)}
end
end
@impl true
@@ -119,9 +127,15 @@ defmodule ClaperWeb.EventLive.Presenter do
@impl true
def handle_info({:form_updated, form}, socket) do
{:noreply,
socket
|> update(:current_form, fn _current_form -> form end)}
if form.active do
{:noreply,
socket
|> update(:current_form, fn _current_form -> form end)}
else
{:noreply,
socket
|> update(:current_form, fn _current_form -> nil end)}
end
end
@impl true
@@ -131,6 +145,26 @@ defmodule ClaperWeb.EventLive.Presenter do
|> update(:current_form, fn _current_form -> nil end)}
end
@impl true
def handle_info({:embed_updated, embed}, socket) do
if embed.active do
{:noreply,
socket
|> update(:current_embed, fn _current_embed -> embed end)}
else
{:noreply,
socket
|> update(:current_embed, fn _current_embed -> nil end)}
end
end
@impl true
def handle_info({:embed_deleted, _embed}, socket) do
{:noreply,
socket
|> update(:current_embed, fn _current_embed -> nil end)}
end
@impl true
def handle_info({:chat_visible, value}, socket) do
{:noreply,
@@ -178,6 +212,14 @@ defmodule ClaperWeb.EventLive.Presenter do
{:noreply, socket |> assign(:current_form, form)}
end
@impl true
def handle_info(
{:current_embed, embed},
socket
) do
{:noreply, socket |> assign(:current_embed, embed)}
end
@impl true
def handle_info(_, socket) do
{:noreply, socket}
@@ -212,6 +254,16 @@ defmodule ClaperWeb.EventLive.Presenter do
end
end
defp embed_at_position(%{assigns: %{event: event, state: state}} = socket) do
with embed <-
Claper.Embeds.get_embed_current_position(
event.presentation_file.id,
state.position
) do
socket |> assign(:current_embed, embed)
end
end
defp list_posts(_socket, event_id) do
Claper.Posts.list_posts(event_id, [:event, :reactions])
end

View File

@@ -1,7 +1,12 @@
<style>
body {
background: black;
}
background: black;
}
iframe {
width: 100%;
height: 100%;
}
</style>
<div
@@ -14,7 +19,7 @@
<!-- JOIN SCREEN -->
<div
id="joinScreen"
class={"#{if @state.join_screen_visible, do: 'opacity-100', else: 'opacity-0'} h-full w-full flex flex-col justify-center bg-black absolute z-30 transition-opacity"}
class={"#{if @state.join_screen_visible, do: 'opacity-100 z-40', else: 'opacity-0'} h-full w-full flex flex-col justify-center bg-black absolute transition-opacity"}
>
<div class="h-full bg-black text-white bg-opacity-50 text-center flex flex-col items-center justify-center">
<span class="font-semibold mb-10 sm:text-3xl md:text-4xl lg:text-6xl">
@@ -68,6 +73,15 @@
</div>
</div>
<% end %>
<%= if @current_embed do %>
<!-- EMBED -->
<div
id="embed"
class={"#{if @state.chat_visible, do: 'h-5/6 w-9/12 right-0', else: 'h-screen w-full'} transition-all duration-150 inline-block transform -translate-y-1/2 top-1/2 z-30 absolute transition-opacity"}
>
<%= raw(@current_embed.content) %>
</div>
<% end %>
<!-- MESSAGES -->
<div
id="slider-wrapper"

View File

@@ -1,7 +1,7 @@
defmodule ClaperWeb.EventLive.Show do
use ClaperWeb, :live_view
alias Claper.{Posts, Polls, Forms}
alias Claper.{Posts, Polls, Forms, Embeds}
alias ClaperWeb.Presence
on_mount(ClaperWeb.AttendeeLiveAuth)
@@ -86,6 +86,7 @@ defmodule ClaperWeb.EventLive.Show do
|> starting_soon_assigns(event)
|> get_current_poll(event)
|> get_current_form(event)
|> get_current_embed(event)
|> check_leader(event)
|> leader_list(event)
@@ -245,6 +246,14 @@ defmodule ClaperWeb.EventLive.Show do
end
end
@impl true
def handle_info(
{:current_embed, embed},
socket
) do
{:noreply, socket |> assign(:current_embed, embed)}
end
@impl true
def handle_info({:post_updated, post}, socket) do
{:noreply, socket |> update(:posts, fn posts -> [post | posts] end)}
@@ -267,9 +276,15 @@ defmodule ClaperWeb.EventLive.Show do
@impl true
def handle_info({:poll_updated, poll}, socket) do
{:noreply,
socket
|> update(:current_poll, fn _current_poll -> poll end)}
if poll.enabled do
{:noreply,
socket
|> update(:current_poll, fn _current_poll -> poll end)}
else
{:noreply,
socket
|> update(:current_poll, fn _current_poll -> nil end)}
end
end
@impl true
@@ -281,9 +296,15 @@ defmodule ClaperWeb.EventLive.Show do
@impl true
def handle_info({:form_updated, form}, socket) do
{:noreply,
socket
|> update(:current_form, fn _current_form -> form end)}
if form.enabled do
{:noreply,
socket
|> update(:current_form, fn _current_form -> form end)}
else
{:noreply,
socket
|> update(:current_form, fn _current_form -> nil end)}
end
end
@impl true
@@ -293,6 +314,26 @@ defmodule ClaperWeb.EventLive.Show do
|> update(:current_form, fn _current_form -> nil end)}
end
@impl true
def handle_info({:embed_updated, embed}, socket) do
if embed.enabled do
{:noreply,
socket
|> update(:current_embed, fn _current_embed -> embed end)}
else
{:noreply,
socket
|> update(:current_embed, fn _current_embed -> nil end)}
end
end
@impl true
def handle_info({:embed_deleted, _embed}, socket) do
{:noreply,
socket
|> update(:current_embed, fn _current_embed -> nil end)}
end
@impl true
def handle_info({:react, type}, socket) do
{:noreply,
@@ -647,6 +688,16 @@ defmodule ClaperWeb.EventLive.Show do
end
end
defp get_current_embed(socket, event) do
with embed <-
Embeds.get_embed_current_position(
event.presentation_file.id,
event.presentation_file.presentation_state.position
) do
socket |> assign(:current_embed, embed)
end
end
defp get_current_vote(%{assigns: %{current_user: current_user}} = socket, poll_id)
when is_map(current_user) do
vote = Polls.get_poll_vote(current_user.id, poll_id)

View File

@@ -88,6 +88,24 @@
</div>
<% end %>
<%= if @current_embed != nil and @current_embed.attendee_visibility == true do %>
<div
id="embed-wrapper-parent"
class="animate__animated animate__zoomInDown w-full lg:w-1/3 lg:mx-auto fixed top-16 z-10 px-2 pb-6 lg:px-7 max-h-screen overflow-y-auto"
>
<div class="transition-all" id="embed-wrapper">
<.live_component
module={ClaperWeb.EventLive.EmbedComponent}
id={"#{@current_embed.id}-embed"}
embed={@current_embed}
current_user={@current_user}
attendee_identifier={@attendee_identifier}
event={@event}
/>
</div>
</div>
<% end %>
<div
class="flex flex-col space-y-4 px-5 pt-20 pb-32 lg:w-1/3 bg-black min-h-screen"
id="post-list"

View File

@@ -13,7 +13,7 @@ defmodule ClaperWeb.StatLive.Index do
event =
Events.get_managed_event!(socket.assigns.current_user, id,
presentation_file: [polls: [:poll_opts], forms: [:form_submits]]
presentation_file: [polls: [:poll_opts], forms: [:form_submits], embeds: []]
)
grouped_total_votes = Claper.Stats.total_vote_count(event.presentation_file.id)

View File

@@ -252,6 +252,17 @@
<% end %>
<% end %>
<%= for embed <- Enum.filter(@event.presentation_file.embeds , fn e -> e.position == position end) do %>
<span class="text-2xl font-semibold text-gray-900 mb-4">
<%= gettext("Embed") %>: <%= embed.title %>
</span>
<div class="px-4 pb-2 pt-3 rounded-b-lg rounded-tr-lg bg-white relative shadow-md text-black break-all mt-4">
<div class="flex space-x-3 items-center">
<%= raw(embed.content) %>
</div>
</div>
<% end %>
<% posts = Enum.filter(@posts, fn p -> p.position == position end) %>
<span class="text-2xl font-semibold text-gray-900 mb-4">Messages</span>

View File

@@ -68,6 +68,8 @@ defmodule ClaperWeb.Router do
live("/e/:code/manage/add/form", EventLive.Manage, :add_form)
live("/e/:code/manage/import", EventLive.Manage, :import)
live("/e/:code/manage/edit/form/:id", EventLive.Manage, :edit_form)
live("/e/:code/manage/add/embed", EventLive.Manage, :add_embed)
live("/e/:code/manage/edit/embed/:id", EventLive.Manage, :edit_embed)
end
end

View File

@@ -37,6 +37,39 @@ defmodule ClaperWeb.Component.Input do
"""
end
def textarea(assigns) do
assigns =
assigns
|> assign_new(:required, fn -> false end)
|> assign_new(:autofocus, fn -> false end)
|> assign_new(:placeholder, fn -> false end)
|> assign_new(:readonly, fn -> false end)
|> assign_new(:labelClass, fn -> "text-gray-700" end)
|> assign_new(:fieldClass, fn -> "bg-white" end)
|> assign_new(:value, fn -> input_value(assigns.form, assigns.key) end)
~H"""
<div class="relative">
<%= label(@form, @key, @name, class: "block text-sm font-medium #{@labelClass}") %>
<div class="mt-1">
<%= text_input(@form, @key,
required: @required,
readonly: @readonly,
autofocus: @autofocus,
placeholder: @placeholder,
autocomplete: @key,
value: @value,
class:
"#{@fieldClass} read-only:opacity-50 outline-none shadow-base focus:ring-primary-500 focus:border-primary-500 focus:ring-2 block w-full text-lg border-gray-300 rounded-md py-4 px-3"
) %>
</div>
<%= if Keyword.has_key?(@form.errors, @key) do %>
<p class="text-supporting-red-500 text-sm"><%= error_tag(@form, @key) %></p>
<% end %>
</div>
"""
end
def select(assigns) do
assigns =
assigns

View File

@@ -15,7 +15,7 @@ msgstr ""
msgid "Settings"
msgstr "Einstellungen"
#: lib/claper_web/live/event_live/manage.ex:457
#: lib/claper_web/live/event_live/manage.ex:529
#: lib/claper_web/live/form_live/form_component.html.heex:37
#: lib/claper_web/live/user_settings_live/show.html.heex:34
#: lib/claper_web/templates/user_registration/new.html.heex:34
@@ -78,22 +78,22 @@ msgstr "Wir haben Ihnen eine E-Mail geschickt an"
msgid "Your personal informations only visible by you"
msgstr "Ihre persönlichen Informationen sind nur für Sie sichtbar"
#: lib/claper_web/live/event_live/show.html.heex:387
#: lib/claper_web/live/event_live/show.html.heex:405
#, elixir-autogen, elixir-format
msgid "days"
msgstr "Tage"
#: lib/claper_web/live/event_live/show.html.heex:393
#: lib/claper_web/live/event_live/show.html.heex:411
#, elixir-autogen, elixir-format
msgid "hours"
msgstr "Stunden"
#: lib/claper_web/live/event_live/show.html.heex:399
#: lib/claper_web/live/event_live/show.html.heex:417
#, elixir-autogen, elixir-format
msgid "minutes"
msgstr "Minuten"
#: lib/claper_web/live/event_live/show.html.heex:118
#: lib/claper_web/live/event_live/show.html.heex:136
#, elixir-autogen, elixir-format
msgid "Be the first to react !"
msgstr "Seien Sie der Erste, der reagiert!"
@@ -101,7 +101,7 @@ msgstr "Seien Sie der Erste, der reagiert!"
#: lib/claper_web/live/event_live/event_card_component.ex:98
#: lib/claper_web/live/event_live/join.ex:42
#: lib/claper_web/live/event_live/join.html.heex:106
#: lib/claper_web/live/event_live/show.html.heex:239
#: lib/claper_web/live/event_live/show.html.heex:257
#, elixir-autogen, elixir-format
msgid "Join"
msgstr "Teilnehmen"
@@ -119,7 +119,7 @@ msgstr "Dashboard"
msgid "Host"
msgstr "Host"
#: lib/claper_web/live/event_live/show.html.heex:405
#: lib/claper_web/live/event_live/show.html.heex:423
#, elixir-autogen, elixir-format
msgid "seconds"
msgstr "Sekunden"
@@ -171,7 +171,7 @@ msgid "Name of your presentation"
msgstr "Name Ihrer Präsentation"
#: lib/claper_web/live/event_live/presenter.html.heex:21
#: lib/claper_web/live/event_live/show.html.heex:414
#: lib/claper_web/live/event_live/show.html.heex:432
#, elixir-autogen, elixir-format
msgid "Scan to interact in real-time"
msgstr "Scannen und in Echtzeit interagieren"
@@ -213,7 +213,7 @@ msgstr "Zurück zur Startseite"
msgid "Created successfully"
msgstr "Erfolgreich erstellt"
#: lib/claper_web/live/event_live/manage.ex:23
#: lib/claper_web/live/event_live/manage.ex:24
#: lib/claper_web/live/event_live/presenter.ex:21
#: lib/claper_web/live/event_live/show.ex:24
#, elixir-autogen, elixir-format
@@ -228,6 +228,7 @@ msgstr "Präsentation existiert nicht"
msgid "Edit"
msgstr "Ändern"
#: lib/claper_web/live/embed_live/form_component.html.heex:38
#: lib/claper_web/live/event_live/event_form_component.html.heex:18
#: lib/claper_web/live/event_live/event_form_component.html.heex:25
#: lib/claper_web/live/event_live/index.ex:71
@@ -238,10 +239,11 @@ msgstr "Ändern"
msgid "Create"
msgstr "Erstellen"
#: lib/claper_web/live/embed_live/form_component.html.heex:43
#: lib/claper_web/live/event_live/event_card_component.ex:171
#: lib/claper_web/live/event_live/event_form_component.html.heex:30
#: lib/claper_web/live/event_live/manage.html.heex:631
#: lib/claper_web/live/event_live/manage.html.heex:731
#: lib/claper_web/live/event_live/manage.html.heex:755
#: lib/claper_web/live/event_live/manage.html.heex:855
#: lib/claper_web/live/event_live/post_component.ex:44
#: lib/claper_web/live/event_live/post_component.ex:116
#: lib/claper_web/live/form_live/form_component.html.heex:103
@@ -250,6 +252,7 @@ msgstr "Erstellen"
msgid "Delete"
msgstr "Löschen"
#: lib/claper_web/live/embed_live/form_component.html.heex:39
#: lib/claper_web/live/event_live/event_form_component.html.heex:17
#: lib/claper_web/live/event_live/event_form_component.html.heex:24
#: lib/claper_web/live/form_live/form_component.html.heex:99
@@ -373,12 +376,12 @@ msgstr "Datei ändern"
msgid "Presentation replaced"
msgstr "Präsentation ersetzt"
#: lib/claper_web/live/event_live/manage.html.heex:256
#: lib/claper_web/live/event_live/manage.html.heex:287
#, elixir-autogen, elixir-format
msgid "Edit poll"
msgstr "Umfrage bearbeiten"
#: lib/claper_web/live/event_live/manage.html.heex:255
#: lib/claper_web/live/event_live/manage.html.heex:286
#, elixir-autogen, elixir-format
msgid "New poll"
msgstr "Neue Umfrage"
@@ -399,7 +402,7 @@ msgid "Add poll to know opinion of your public."
msgstr "Fügen Sie eine Umfrage hinzu, um die Meinung Ihres Publikums zu erfahren."
#: lib/claper_web/live/event_live/manage.html.heex:174
#: lib/claper_web/live/event_live/manage.html.heex:395
#: lib/claper_web/live/event_live/manage.html.heex:447
#, elixir-autogen, elixir-format
msgid "Poll"
msgstr "Umfrage"
@@ -443,8 +446,9 @@ msgstr "Benutzer Email-Adresse"
msgid "Present/Customize"
msgstr "Vorstellen/Ändern"
#: lib/claper_web/live/event_live/manage.html.heex:408
#: lib/claper_web/live/event_live/manage.html.heex:484
#: lib/claper_web/live/event_live/manage.html.heex:460
#: lib/claper_web/live/event_live/manage.html.heex:536
#: lib/claper_web/live/event_live/manage.html.heex:606
#, elixir-autogen, elixir-format
msgid "Active"
msgstr "Aktiv"
@@ -454,12 +458,12 @@ msgstr "Aktiv"
msgid "Changing your file will remove all interaction elements like polls associated."
msgstr "Wenn Sie Ihre Datei ändern, werden alle damit verbundenen Interaktionselemente wie Umfragen entfernt."
#: lib/claper_web/live/event_live/manage.html.heex:584
#: lib/claper_web/live/event_live/manage.html.heex:708
#, elixir-autogen, elixir-format
msgid "Messages from attendees will appear here."
msgstr "Nachrichten von Teilnehmern werden hier erscheinen."
#: lib/claper_web/live/event_live/manage.html.heex:770
#: lib/claper_web/live/event_live/manage.html.heex:894
#, elixir-autogen, elixir-format
msgid "On screen settings"
msgstr "Bildschirmeinstellungen"
@@ -484,19 +488,20 @@ msgstr "Start"
msgid "Press <strong>F</strong> in the presentation window to enable fullscreen"
msgstr "Drücken Sie <strong>F</strong> im Präsentationsfenster, um den Vollbildmodus zu aktivieren"
#: lib/claper_web/live/event_live/show.html.heex:298
#: lib/claper_web/live/event_live/show.html.heex:316
#, elixir-autogen, elixir-format
msgid "Ask, comment..."
msgstr "Fragen, kommentieren..."
#: lib/claper_web/live/event_live/manage.html.heex:556
#: lib/claper_web/live/event_live/manage.html.heex:680
#: lib/claper_web/live/stat_live/index.html.heex:71
#, elixir-autogen, elixir-format
msgid "Messages"
msgstr "Nachrichten"
#: lib/claper_web/live/event_live/manage.html.heex:416
#: lib/claper_web/live/event_live/manage.html.heex:492
#: lib/claper_web/live/event_live/manage.html.heex:468
#: lib/claper_web/live/event_live/manage.html.heex:544
#: lib/claper_web/live/event_live/manage.html.heex:614
#, elixir-autogen, elixir-format
msgid "Set active"
msgstr "Aktivieren"
@@ -532,26 +537,26 @@ msgstr "Wenn Sie Probleme mit der obigen Schaltfläche haben, kopieren Sie die f
msgid "You can change your email by visiting the URL below"
msgstr "Sie können Ihre E-Mail-Adresse ändern, indem Sie die folgende URL aufrufen"
#: lib/claper_web/live/event_live/manage.html.heex:525
#: lib/claper_web/live/event_live/manage.html.heex:649
#, elixir-autogen, elixir-format
msgid "Add interaction"
msgstr "Interaktion hinzufügen"
#: lib/claper_web/live/event_live/manage.html.heex:607
#: lib/claper_web/live/event_live/manage.html.heex:622
#: lib/claper_web/live/event_live/manage.html.heex:731
#: lib/claper_web/live/event_live/manage.html.heex:746
#, elixir-autogen, elixir-format
msgid "Blocking this user will delete all his messages and he will not be able to join again, confirm ?"
msgstr "Wenn Sie diesen Benutzer sperren, werden alle seine Nachrichten gelöscht, und er kann nicht mehr beitreten. Bestätigen?"
#: lib/claper_web/live/event_live/show.ex:50
#: lib/claper_web/live/event_live/show.ex:197
#: lib/claper_web/live/event_live/show.ex:212
#: lib/claper_web/live/event_live/show.ex:198
#: lib/claper_web/live/event_live/show.ex:213
#, elixir-autogen, elixir-format
msgid "You have been banned from this event"
msgstr "Sie wurden von dieser Veranstaltung ausgeschlossen"
#: lib/claper_web/live/event_live/manage.html.heex:601
#: lib/claper_web/live/event_live/manage.html.heex:616
#: lib/claper_web/live/event_live/manage.html.heex:725
#: lib/claper_web/live/event_live/manage.html.heex:740
#, elixir-autogen, elixir-format
msgid "Ban"
msgstr "Ban"
@@ -645,7 +650,7 @@ msgstr "Veranstaltung"
msgid "Interactions history"
msgstr "Interaktionsgeschichte"
#: lib/claper_web/live/stat_live/index.html.heex:260
#: lib/claper_web/live/stat_live/index.html.heex:271
#, elixir-autogen, elixir-format
msgid "No messages has been sent"
msgstr "Es wurden keine Nachrichten gesendet"
@@ -705,7 +710,7 @@ msgstr "Anmeldung"
msgid "Connect to your account"
msgstr "Verbinden Sie sich mit Ihrem Konto"
#: lib/claper_web/live/event_live/show.html.heex:423
#: lib/claper_web/live/event_live/show.html.heex:441
#, elixir-autogen, elixir-format
msgid "Or use the code:"
msgstr "Oder verwenden Sie den Code:"
@@ -776,34 +781,34 @@ msgstr "Fügen Sie ein Formular hinzu, um Daten von Ihrem Publikum zu sammeln."
msgid "Current form"
msgstr "Aktuelles Formular"
#: lib/claper_web/live/event_live/manage.html.heex:277
#: lib/claper_web/live/event_live/manage.html.heex:308
#, elixir-autogen, elixir-format
msgid "Edit form"
msgstr "Formular bearbeiten"
#: lib/claper_web/live/event_live/manage.html.heex:211
#: lib/claper_web/live/event_live/manage.html.heex:471
#: lib/claper_web/live/event_live/manage.html.heex:523
#: lib/claper_web/live/stat_live/index.html.heex:215
#, elixir-autogen, elixir-format
msgid "Form"
msgstr "Formular"
#: lib/claper_web/live/event_live/manage.html.heex:559
#: lib/claper_web/live/event_live/manage.html.heex:683
#, elixir-autogen, elixir-format
msgid "Form submissions"
msgstr "Abgeschickte Formulare"
#: lib/claper_web/live/event_live/manage.html.heex:711
#: lib/claper_web/live/event_live/manage.html.heex:835
#, elixir-autogen, elixir-format
msgid "Form submissions from attendees will appear here."
msgstr "Formulareinsendungen der Teilnehmer werden hier angezeigt."
#: lib/claper_web/live/event_live/manage.ex:456
#: lib/claper_web/live/event_live/manage.ex:528
#, elixir-autogen, elixir-format
msgid "Name"
msgstr "Name"
#: lib/claper_web/live/event_live/manage.html.heex:276
#: lib/claper_web/live/event_live/manage.html.heex:307
#, elixir-autogen, elixir-format
msgid "New form"
msgstr "Neues Formular"
@@ -828,7 +833,7 @@ msgstr "Abschicken"
msgid "Text"
msgstr "Text"
#: lib/claper_web/live/event_live/manage.html.heex:736
#: lib/claper_web/live/event_live/manage.html.heex:860
#, elixir-autogen, elixir-format
msgid "This cannot be undone, confirm ?"
msgstr "Dies kann nicht rückgängig gemacht werden. Bestätigen?"
@@ -868,22 +873,22 @@ msgstr "Wählen Sie eine oder mehrere Optionen aus"
msgid "Multiple answers"
msgstr "Mehrere Antworten"
#: lib/claper_web/live/event_live/manage.html.heex:244
#: lib/claper_web/live/event_live/manage.html.heex:275
#, elixir-autogen, elixir-format
msgid "Import all interactions from another presentation"
msgstr "Importieren Sie alle Interaktionen aus einer anderen Präsentation"
#: lib/claper_web/live/event_live/manage.ex:183
#: lib/claper_web/live/event_live/manage.ex:202
#, elixir-autogen, elixir-format
msgid "Interactions import failed"
msgstr "Der Import der Interaktionen ist fehlgeschlagen"
#: lib/claper_web/live/event_live/manage.ex:176
#: lib/claper_web/live/event_live/manage.ex:195
#, elixir-autogen, elixir-format
msgid "Interactions imported successfully"
msgstr "Interaktionen erfolgreich importiert"
#: lib/claper_web/live/event_live/manage.html.heex:295
#: lib/claper_web/live/event_live/manage.html.heex:347
#, elixir-autogen, elixir-format
msgid "Select presentation"
msgstr "Präsentation auswählen"
@@ -893,55 +898,55 @@ msgstr "Präsentation auswählen"
msgid "PDF, PPT, PPTX up to %{size} MB"
msgstr "PDF, PPT, PPTX bis zu %{size} MB"
#: lib/claper_web/live/event_live/manage.html.heex:796
#: lib/claper_web/live/event_live/manage.html.heex:920
#, elixir-autogen, elixir-format
msgid "Attendees settings"
msgstr "Teilnehmereinstellungen"
#: lib/claper_web/live/event_live/manage.html.heex:800
#: lib/claper_web/live/event_live/manage.html.heex:924
#, elixir-autogen, elixir-format
msgid "Enable messages"
msgstr "Nachrichten aktivieren"
#: lib/claper_web/live/event_live/manage.html.heex:777
#: lib/claper_web/live/event_live/manage.html.heex:901
#, elixir-autogen, elixir-format
msgid "Show instructions"
msgstr "Anleitung anzeigen"
#: lib/claper_web/live/event_live/manage.html.heex:782
#: lib/claper_web/live/event_live/manage.html.heex:906
#, elixir-autogen, elixir-format
msgid "Show messages"
msgstr "Nachrichten anzeigen"
#: lib/claper_web/live/event_live/manage.html.heex:791
#: lib/claper_web/live/event_live/manage.html.heex:915
#, elixir-autogen, elixir-format
msgid "Show poll results"
msgstr "Umfrageergebnisse anzeigen"
#: lib/claper_web/live/event_live/show.html.heex:318
#: lib/claper_web/live/event_live/show.html.heex:336
#, elixir-autogen, elixir-format
msgid "Messages deactivated"
msgstr "Nachrichten deaktiviert"
#: lib/claper_web/live/event_live/show.html.heex:161
#: lib/claper_web/live/event_live/show.html.heex:182
#: lib/claper_web/live/event_live/show.html.heex:282
#: lib/claper_web/live/event_live/show.html.heex:179
#: lib/claper_web/live/event_live/show.html.heex:200
#: lib/claper_web/live/event_live/show.html.heex:300
#, elixir-autogen, elixir-format
msgid "Anonymous"
msgstr "Anonymous"
#: lib/claper_web/live/event_live/show.html.heex:208
#: lib/claper_web/live/event_live/show.html.heex:226
#, elixir-autogen, elixir-format
msgid "Close"
msgstr "Schließen"
#: lib/claper_web/live/event_live/manage.html.heex:808
#: lib/claper_web/live/event_live/manage.html.heex:932
#, elixir-autogen, elixir-format, fuzzy
msgid "Enable anonymous messages"
msgstr "Anonyme Nachrichten aktivieren"
#: lib/claper_web/live/event_live/show.html.heex:189
#: lib/claper_web/live/event_live/show.html.heex:234
#: lib/claper_web/live/event_live/show.html.heex:207
#: lib/claper_web/live/event_live/show.html.heex:252
#, elixir-autogen, elixir-format, fuzzy
msgid "Enter your name"
msgstr "Benutze deinen Namen"
@@ -951,12 +956,12 @@ msgstr "Benutze deinen Namen"
msgid "Or go to %{url} and use the code:"
msgstr "Oder gehen Sie zu %{url} und verwenden Sie den Code:"
#: lib/claper_web/live/event_live/show.html.heex:202
#: lib/claper_web/live/event_live/show.html.heex:220
#, elixir-autogen, elixir-format
msgid "Use your name"
msgstr "Benutze deinen Namen"
#: lib/claper_web/live/event_live/show.html.heex:182
#: lib/claper_web/live/event_live/show.html.heex:200
#, elixir-autogen, elixir-format
msgid "disabled"
msgstr "deaktiviert"
@@ -966,6 +971,57 @@ msgstr "deaktiviert"
msgid "Account creation is disabled"
msgstr "Kontoerstellung ist deaktiviert"
#: lib/claper_web/live/event_live/manage.html.heex:244
#, elixir-autogen, elixir-format
msgid "Add a Youtube video or any web content."
msgstr "Fügen Sie ein YouTube-Video oder einen beliebigen Webinhalt hinzu."
#: lib/claper_web/live/embed_live/form_component.html.heex:23
#, elixir-autogen, elixir-format
msgid "Content of your embed"
msgstr "Inhalt Ihrer Einbettung"
#: lib/claper_web/live/event_live/embed_component.ex:59
#, elixir-autogen, elixir-format, fuzzy
msgid "Current embed"
msgstr "Aktuelle Einbettung"
#: lib/claper_web/live/event_live/manage.html.heex:329
#, elixir-autogen, elixir-format
msgid "Edit Embed"
msgstr "Einbetten bearbeiten"
#: lib/claper_web/live/event_live/manage.html.heex:593
#: lib/claper_web/live/stat_live/index.html.heex:257
#, elixir-autogen, elixir-format
msgid "Embed"
msgstr "Einbetten"
#: lib/claper_web/live/event_live/manage.html.heex:242
#, elixir-autogen, elixir-format
msgid "Embeded"
msgstr "Eingebettet"
#: lib/claper_web/live/event_live/manage.html.heex:328
#, elixir-autogen, elixir-format
msgid "New Embed"
msgstr "Neue Einbettung"
#: lib/claper_web/live/event_live/embed_component.ex:36
#, elixir-autogen, elixir-format, fuzzy
msgid "See current embed"
msgstr "Siehe aktuelle Einbettung"
#: lib/claper_web/live/embed_live/form_component.html.heex:49
#, elixir-autogen, elixir-format
msgid "This will delete the embed, are you sure?"
msgstr "Dadurch wird die Einbettung gelöscht. Sind Sie sicher?"
#: lib/claper_web/live/embed_live/form_component.html.heex:14
#, elixir-autogen, elixir-format, fuzzy
msgid "Title of your embed"
msgstr "Titel Ihrer Einbettung"
#: lib/claper_web/templates/user_reset_password/edit.html.heex:51
#, elixir-autogen, elixir-format
msgid "Confirm new password"

View File

@@ -17,7 +17,7 @@ msgstr ""
msgid "Settings"
msgstr ""
#: lib/claper_web/live/event_live/manage.ex:457
#: lib/claper_web/live/event_live/manage.ex:529
#: lib/claper_web/live/form_live/form_component.html.heex:37
#: lib/claper_web/live/user_settings_live/show.html.heex:34
#: lib/claper_web/templates/user_registration/new.html.heex:34
@@ -80,22 +80,22 @@ msgstr ""
msgid "Your personal informations only visible by you"
msgstr ""
#: lib/claper_web/live/event_live/show.html.heex:387
#: lib/claper_web/live/event_live/show.html.heex:405
#, elixir-autogen, elixir-format
msgid "days"
msgstr ""
#: lib/claper_web/live/event_live/show.html.heex:393
#: lib/claper_web/live/event_live/show.html.heex:411
#, elixir-autogen, elixir-format
msgid "hours"
msgstr ""
#: lib/claper_web/live/event_live/show.html.heex:399
#: lib/claper_web/live/event_live/show.html.heex:417
#, elixir-autogen, elixir-format
msgid "minutes"
msgstr ""
#: lib/claper_web/live/event_live/show.html.heex:118
#: lib/claper_web/live/event_live/show.html.heex:136
#, elixir-autogen, elixir-format
msgid "Be the first to react !"
msgstr ""
@@ -103,7 +103,7 @@ msgstr ""
#: lib/claper_web/live/event_live/event_card_component.ex:98
#: lib/claper_web/live/event_live/join.ex:42
#: lib/claper_web/live/event_live/join.html.heex:106
#: lib/claper_web/live/event_live/show.html.heex:239
#: lib/claper_web/live/event_live/show.html.heex:257
#, elixir-autogen, elixir-format
msgid "Join"
msgstr ""
@@ -121,7 +121,7 @@ msgstr ""
msgid "Host"
msgstr ""
#: lib/claper_web/live/event_live/show.html.heex:405
#: lib/claper_web/live/event_live/show.html.heex:423
#, elixir-autogen, elixir-format
msgid "seconds"
msgstr ""
@@ -173,7 +173,7 @@ msgid "Name of your presentation"
msgstr ""
#: lib/claper_web/live/event_live/presenter.html.heex:21
#: lib/claper_web/live/event_live/show.html.heex:414
#: lib/claper_web/live/event_live/show.html.heex:432
#, elixir-autogen, elixir-format
msgid "Scan to interact in real-time"
msgstr ""
@@ -215,7 +215,7 @@ msgstr ""
msgid "Created successfully"
msgstr ""
#: lib/claper_web/live/event_live/manage.ex:23
#: lib/claper_web/live/event_live/manage.ex:24
#: lib/claper_web/live/event_live/presenter.ex:21
#: lib/claper_web/live/event_live/show.ex:24
#, elixir-autogen, elixir-format
@@ -230,6 +230,7 @@ msgstr ""
msgid "Edit"
msgstr ""
#: lib/claper_web/live/embed_live/form_component.html.heex:38
#: lib/claper_web/live/event_live/event_form_component.html.heex:18
#: lib/claper_web/live/event_live/event_form_component.html.heex:25
#: lib/claper_web/live/event_live/index.ex:71
@@ -240,10 +241,11 @@ msgstr ""
msgid "Create"
msgstr ""
#: lib/claper_web/live/embed_live/form_component.html.heex:43
#: lib/claper_web/live/event_live/event_card_component.ex:171
#: lib/claper_web/live/event_live/event_form_component.html.heex:30
#: lib/claper_web/live/event_live/manage.html.heex:631
#: lib/claper_web/live/event_live/manage.html.heex:731
#: lib/claper_web/live/event_live/manage.html.heex:755
#: lib/claper_web/live/event_live/manage.html.heex:855
#: lib/claper_web/live/event_live/post_component.ex:44
#: lib/claper_web/live/event_live/post_component.ex:116
#: lib/claper_web/live/form_live/form_component.html.heex:103
@@ -252,6 +254,7 @@ msgstr ""
msgid "Delete"
msgstr ""
#: lib/claper_web/live/embed_live/form_component.html.heex:39
#: lib/claper_web/live/event_live/event_form_component.html.heex:17
#: lib/claper_web/live/event_live/event_form_component.html.heex:24
#: lib/claper_web/live/form_live/form_component.html.heex:99
@@ -375,12 +378,12 @@ msgstr ""
msgid "Presentation replaced"
msgstr ""
#: lib/claper_web/live/event_live/manage.html.heex:256
#: lib/claper_web/live/event_live/manage.html.heex:287
#, elixir-autogen, elixir-format
msgid "Edit poll"
msgstr ""
#: lib/claper_web/live/event_live/manage.html.heex:255
#: lib/claper_web/live/event_live/manage.html.heex:286
#, elixir-autogen, elixir-format
msgid "New poll"
msgstr ""
@@ -401,7 +404,7 @@ msgid "Add poll to know opinion of your public."
msgstr ""
#: lib/claper_web/live/event_live/manage.html.heex:174
#: lib/claper_web/live/event_live/manage.html.heex:395
#: lib/claper_web/live/event_live/manage.html.heex:447
#, elixir-autogen, elixir-format
msgid "Poll"
msgstr ""
@@ -445,8 +448,9 @@ msgstr ""
msgid "Present/Customize"
msgstr ""
#: lib/claper_web/live/event_live/manage.html.heex:408
#: lib/claper_web/live/event_live/manage.html.heex:484
#: lib/claper_web/live/event_live/manage.html.heex:460
#: lib/claper_web/live/event_live/manage.html.heex:536
#: lib/claper_web/live/event_live/manage.html.heex:606
#, elixir-autogen, elixir-format
msgid "Active"
msgstr ""
@@ -456,12 +460,12 @@ msgstr ""
msgid "Changing your file will remove all interaction elements like polls associated."
msgstr ""
#: lib/claper_web/live/event_live/manage.html.heex:584
#: lib/claper_web/live/event_live/manage.html.heex:708
#, elixir-autogen, elixir-format
msgid "Messages from attendees will appear here."
msgstr ""
#: lib/claper_web/live/event_live/manage.html.heex:770
#: lib/claper_web/live/event_live/manage.html.heex:894
#, elixir-autogen, elixir-format
msgid "On screen settings"
msgstr ""
@@ -486,19 +490,20 @@ msgstr ""
msgid "Press <strong>F</strong> in the presentation window to enable fullscreen"
msgstr ""
#: lib/claper_web/live/event_live/show.html.heex:298
#: lib/claper_web/live/event_live/show.html.heex:316
#, elixir-autogen, elixir-format
msgid "Ask, comment..."
msgstr ""
#: lib/claper_web/live/event_live/manage.html.heex:556
#: lib/claper_web/live/event_live/manage.html.heex:680
#: lib/claper_web/live/stat_live/index.html.heex:71
#, elixir-autogen, elixir-format
msgid "Messages"
msgstr ""
#: lib/claper_web/live/event_live/manage.html.heex:416
#: lib/claper_web/live/event_live/manage.html.heex:492
#: lib/claper_web/live/event_live/manage.html.heex:468
#: lib/claper_web/live/event_live/manage.html.heex:544
#: lib/claper_web/live/event_live/manage.html.heex:614
#, elixir-autogen, elixir-format
msgid "Set active"
msgstr ""
@@ -534,26 +539,26 @@ msgstr ""
msgid "You can change your email by visiting the URL below"
msgstr ""
#: lib/claper_web/live/event_live/manage.html.heex:525
#: lib/claper_web/live/event_live/manage.html.heex:649
#, elixir-autogen, elixir-format
msgid "Add interaction"
msgstr ""
#: lib/claper_web/live/event_live/manage.html.heex:607
#: lib/claper_web/live/event_live/manage.html.heex:622
#: lib/claper_web/live/event_live/manage.html.heex:731
#: lib/claper_web/live/event_live/manage.html.heex:746
#, elixir-autogen, elixir-format
msgid "Blocking this user will delete all his messages and he will not be able to join again, confirm ?"
msgstr ""
#: lib/claper_web/live/event_live/show.ex:50
#: lib/claper_web/live/event_live/show.ex:197
#: lib/claper_web/live/event_live/show.ex:212
#: lib/claper_web/live/event_live/show.ex:198
#: lib/claper_web/live/event_live/show.ex:213
#, elixir-autogen, elixir-format
msgid "You have been banned from this event"
msgstr ""
#: lib/claper_web/live/event_live/manage.html.heex:601
#: lib/claper_web/live/event_live/manage.html.heex:616
#: lib/claper_web/live/event_live/manage.html.heex:725
#: lib/claper_web/live/event_live/manage.html.heex:740
#, elixir-autogen, elixir-format
msgid "Ban"
msgstr ""
@@ -647,7 +652,7 @@ msgstr ""
msgid "Interactions history"
msgstr ""
#: lib/claper_web/live/stat_live/index.html.heex:260
#: lib/claper_web/live/stat_live/index.html.heex:271
#, elixir-autogen, elixir-format
msgid "No messages has been sent"
msgstr ""
@@ -707,7 +712,7 @@ msgstr ""
msgid "Connect to your account"
msgstr ""
#: lib/claper_web/live/event_live/show.html.heex:423
#: lib/claper_web/live/event_live/show.html.heex:441
#, elixir-autogen, elixir-format
msgid "Or use the code:"
msgstr ""
@@ -778,34 +783,34 @@ msgstr ""
msgid "Current form"
msgstr ""
#: lib/claper_web/live/event_live/manage.html.heex:277
#: lib/claper_web/live/event_live/manage.html.heex:308
#, elixir-autogen, elixir-format
msgid "Edit form"
msgstr ""
#: lib/claper_web/live/event_live/manage.html.heex:211
#: lib/claper_web/live/event_live/manage.html.heex:471
#: lib/claper_web/live/event_live/manage.html.heex:523
#: lib/claper_web/live/stat_live/index.html.heex:215
#, elixir-autogen, elixir-format
msgid "Form"
msgstr ""
#: lib/claper_web/live/event_live/manage.html.heex:559
#: lib/claper_web/live/event_live/manage.html.heex:683
#, elixir-autogen, elixir-format
msgid "Form submissions"
msgstr ""
#: lib/claper_web/live/event_live/manage.html.heex:711
#: lib/claper_web/live/event_live/manage.html.heex:835
#, elixir-autogen, elixir-format
msgid "Form submissions from attendees will appear here."
msgstr ""
#: lib/claper_web/live/event_live/manage.ex:456
#: lib/claper_web/live/event_live/manage.ex:528
#, elixir-autogen, elixir-format
msgid "Name"
msgstr ""
#: lib/claper_web/live/event_live/manage.html.heex:276
#: lib/claper_web/live/event_live/manage.html.heex:307
#, elixir-autogen, elixir-format
msgid "New form"
msgstr ""
@@ -830,7 +835,7 @@ msgstr ""
msgid "Text"
msgstr ""
#: lib/claper_web/live/event_live/manage.html.heex:736
#: lib/claper_web/live/event_live/manage.html.heex:860
#, elixir-autogen, elixir-format
msgid "This cannot be undone, confirm ?"
msgstr ""
@@ -870,22 +875,22 @@ msgstr ""
msgid "Multiple answers"
msgstr ""
#: lib/claper_web/live/event_live/manage.html.heex:244
#: lib/claper_web/live/event_live/manage.html.heex:275
#, elixir-autogen, elixir-format
msgid "Import all interactions from another presentation"
msgstr ""
#: lib/claper_web/live/event_live/manage.ex:183
#: lib/claper_web/live/event_live/manage.ex:202
#, elixir-autogen, elixir-format
msgid "Interactions import failed"
msgstr ""
#: lib/claper_web/live/event_live/manage.ex:176
#: lib/claper_web/live/event_live/manage.ex:195
#, elixir-autogen, elixir-format
msgid "Interactions imported successfully"
msgstr ""
#: lib/claper_web/live/event_live/manage.html.heex:295
#: lib/claper_web/live/event_live/manage.html.heex:347
#, elixir-autogen, elixir-format
msgid "Select presentation"
msgstr ""
@@ -895,55 +900,55 @@ msgstr ""
msgid "PDF, PPT, PPTX up to %{size} MB"
msgstr ""
#: lib/claper_web/live/event_live/manage.html.heex:796
#: lib/claper_web/live/event_live/manage.html.heex:920
#, elixir-autogen, elixir-format
msgid "Attendees settings"
msgstr ""
#: lib/claper_web/live/event_live/manage.html.heex:800
#: lib/claper_web/live/event_live/manage.html.heex:924
#, elixir-autogen, elixir-format
msgid "Enable messages"
msgstr ""
#: lib/claper_web/live/event_live/manage.html.heex:777
#: lib/claper_web/live/event_live/manage.html.heex:901
#, elixir-autogen, elixir-format
msgid "Show instructions"
msgstr ""
#: lib/claper_web/live/event_live/manage.html.heex:782
#: lib/claper_web/live/event_live/manage.html.heex:906
#, elixir-autogen, elixir-format
msgid "Show messages"
msgstr ""
#: lib/claper_web/live/event_live/manage.html.heex:791
#: lib/claper_web/live/event_live/manage.html.heex:915
#, elixir-autogen, elixir-format
msgid "Show poll results"
msgstr ""
#: lib/claper_web/live/event_live/show.html.heex:318
#: lib/claper_web/live/event_live/show.html.heex:336
#, elixir-autogen, elixir-format
msgid "Messages deactivated"
msgstr ""
#: lib/claper_web/live/event_live/show.html.heex:161
#: lib/claper_web/live/event_live/show.html.heex:182
#: lib/claper_web/live/event_live/show.html.heex:282
#: lib/claper_web/live/event_live/show.html.heex:179
#: lib/claper_web/live/event_live/show.html.heex:200
#: lib/claper_web/live/event_live/show.html.heex:300
#, elixir-autogen, elixir-format
msgid "Anonymous"
msgstr ""
#: lib/claper_web/live/event_live/show.html.heex:208
#: lib/claper_web/live/event_live/show.html.heex:226
#, elixir-autogen, elixir-format
msgid "Close"
msgstr ""
#: lib/claper_web/live/event_live/manage.html.heex:808
#: lib/claper_web/live/event_live/manage.html.heex:932
#, elixir-autogen, elixir-format
msgid "Enable anonymous messages"
msgstr ""
#: lib/claper_web/live/event_live/show.html.heex:189
#: lib/claper_web/live/event_live/show.html.heex:234
#: lib/claper_web/live/event_live/show.html.heex:207
#: lib/claper_web/live/event_live/show.html.heex:252
#, elixir-autogen, elixir-format
msgid "Enter your name"
msgstr ""
@@ -953,12 +958,12 @@ msgstr ""
msgid "Or go to %{url} and use the code:"
msgstr ""
#: lib/claper_web/live/event_live/show.html.heex:202
#: lib/claper_web/live/event_live/show.html.heex:220
#, elixir-autogen, elixir-format
msgid "Use your name"
msgstr ""
#: lib/claper_web/live/event_live/show.html.heex:182
#: lib/claper_web/live/event_live/show.html.heex:200
#, elixir-autogen, elixir-format
msgid "disabled"
msgstr ""
@@ -968,6 +973,56 @@ msgstr ""
msgid "Account creation is disabled"
msgstr ""
#: lib/claper_web/live/event_live/manage.html.heex:244
#, elixir-autogen, elixir-format
msgid "Add a Youtube video or any web content."
msgstr ""
#: lib/claper_web/live/embed_live/form_component.html.heex:23
#, elixir-autogen, elixir-format
msgid "Content of your embed"
msgstr ""
#: lib/claper_web/live/event_live/embed_component.ex:59
#, elixir-autogen, elixir-format
msgid "Current embed"
msgstr ""
#: lib/claper_web/live/event_live/manage.html.heex:329
#, elixir-autogen, elixir-format
msgid "Edit Embed"
msgstr ""
#: lib/claper_web/live/event_live/manage.html.heex:593
#: lib/claper_web/live/stat_live/index.html.heex:257
#, elixir-autogen, elixir-format
msgid "Embed"
msgstr ""
#: lib/claper_web/live/event_live/manage.html.heex:242
#, elixir-autogen, elixir-format
msgid "Embeded"
msgstr ""
#: lib/claper_web/live/event_live/manage.html.heex:328
#, elixir-autogen, elixir-format
msgid "New Embed"
msgstr ""
#: lib/claper_web/live/event_live/embed_component.ex:36
#, elixir-autogen, elixir-format
msgid "See current embed"
msgstr ""
#: lib/claper_web/live/embed_live/form_component.html.heex:49
#, elixir-autogen, elixir-format
msgid "This will delete the embed, are you sure?"
msgstr ""
#: lib/claper_web/live/embed_live/form_component.html.heex:14
#, elixir-autogen, elixir-format
msgid "Title of your embed"
#: lib/claper_web/templates/user_reset_password/edit.html.heex:51
#, elixir-autogen, elixir-format
msgid "Confirm new password"

View File

@@ -15,7 +15,7 @@ msgstr ""
msgid "Settings"
msgstr "Settings"
#: lib/claper_web/live/event_live/manage.ex:457
#: lib/claper_web/live/event_live/manage.ex:529
#: lib/claper_web/live/form_live/form_component.html.heex:37
#: lib/claper_web/live/user_settings_live/show.html.heex:34
#: lib/claper_web/templates/user_registration/new.html.heex:34
@@ -78,22 +78,22 @@ msgstr "We sent you an email at"
msgid "Your personal informations only visible by you"
msgstr "Your personal informations only visible by you"
#: lib/claper_web/live/event_live/show.html.heex:387
#: lib/claper_web/live/event_live/show.html.heex:405
#, elixir-autogen, elixir-format
msgid "days"
msgstr "days"
#: lib/claper_web/live/event_live/show.html.heex:393
#: lib/claper_web/live/event_live/show.html.heex:411
#, elixir-autogen, elixir-format
msgid "hours"
msgstr "hours"
#: lib/claper_web/live/event_live/show.html.heex:399
#: lib/claper_web/live/event_live/show.html.heex:417
#, elixir-autogen, elixir-format
msgid "minutes"
msgstr "minutes"
#: lib/claper_web/live/event_live/show.html.heex:118
#: lib/claper_web/live/event_live/show.html.heex:136
#, elixir-autogen, elixir-format
msgid "Be the first to react !"
msgstr "Be the first to react !"
@@ -101,7 +101,7 @@ msgstr "Be the first to react !"
#: lib/claper_web/live/event_live/event_card_component.ex:98
#: lib/claper_web/live/event_live/join.ex:42
#: lib/claper_web/live/event_live/join.html.heex:106
#: lib/claper_web/live/event_live/show.html.heex:239
#: lib/claper_web/live/event_live/show.html.heex:257
#, elixir-autogen, elixir-format
msgid "Join"
msgstr "Join"
@@ -119,7 +119,7 @@ msgstr "Dashboard"
msgid "Host"
msgstr "Host"
#: lib/claper_web/live/event_live/show.html.heex:405
#: lib/claper_web/live/event_live/show.html.heex:423
#, elixir-autogen, elixir-format
msgid "seconds"
msgstr "seconds"
@@ -171,7 +171,7 @@ msgid "Name of your presentation"
msgstr "Name of your presentation"
#: lib/claper_web/live/event_live/presenter.html.heex:21
#: lib/claper_web/live/event_live/show.html.heex:414
#: lib/claper_web/live/event_live/show.html.heex:432
#, elixir-autogen, elixir-format
msgid "Scan to interact in real-time"
msgstr "Scan to interact in real-time"
@@ -213,7 +213,7 @@ msgstr "Return to home"
msgid "Created successfully"
msgstr "Created successfully"
#: lib/claper_web/live/event_live/manage.ex:23
#: lib/claper_web/live/event_live/manage.ex:24
#: lib/claper_web/live/event_live/presenter.ex:21
#: lib/claper_web/live/event_live/show.ex:24
#, elixir-autogen, elixir-format
@@ -228,6 +228,7 @@ msgstr "Presentation doesn't exist"
msgid "Edit"
msgstr "Edit"
#: lib/claper_web/live/embed_live/form_component.html.heex:38
#: lib/claper_web/live/event_live/event_form_component.html.heex:18
#: lib/claper_web/live/event_live/event_form_component.html.heex:25
#: lib/claper_web/live/event_live/index.ex:71
@@ -238,10 +239,11 @@ msgstr "Edit"
msgid "Create"
msgstr "Create"
#: lib/claper_web/live/embed_live/form_component.html.heex:43
#: lib/claper_web/live/event_live/event_card_component.ex:171
#: lib/claper_web/live/event_live/event_form_component.html.heex:30
#: lib/claper_web/live/event_live/manage.html.heex:631
#: lib/claper_web/live/event_live/manage.html.heex:731
#: lib/claper_web/live/event_live/manage.html.heex:755
#: lib/claper_web/live/event_live/manage.html.heex:855
#: lib/claper_web/live/event_live/post_component.ex:44
#: lib/claper_web/live/event_live/post_component.ex:116
#: lib/claper_web/live/form_live/form_component.html.heex:103
@@ -250,6 +252,7 @@ msgstr "Create"
msgid "Delete"
msgstr "Delete"
#: lib/claper_web/live/embed_live/form_component.html.heex:39
#: lib/claper_web/live/event_live/event_form_component.html.heex:17
#: lib/claper_web/live/event_live/event_form_component.html.heex:24
#: lib/claper_web/live/form_live/form_component.html.heex:99
@@ -373,12 +376,12 @@ msgstr "Change file"
msgid "Presentation replaced"
msgstr "Presentation replaced"
#: lib/claper_web/live/event_live/manage.html.heex:256
#: lib/claper_web/live/event_live/manage.html.heex:287
#, elixir-autogen, elixir-format
msgid "Edit poll"
msgstr "Edit poll"
#: lib/claper_web/live/event_live/manage.html.heex:255
#: lib/claper_web/live/event_live/manage.html.heex:286
#, elixir-autogen, elixir-format
msgid "New poll"
msgstr "New poll"
@@ -399,7 +402,7 @@ msgid "Add poll to know opinion of your public."
msgstr "Add poll to know opinion of your public."
#: lib/claper_web/live/event_live/manage.html.heex:174
#: lib/claper_web/live/event_live/manage.html.heex:395
#: lib/claper_web/live/event_live/manage.html.heex:447
#, elixir-autogen, elixir-format
msgid "Poll"
msgstr "Poll"
@@ -443,8 +446,9 @@ msgstr "User email address"
msgid "Present/Customize"
msgstr "Present/Customize"
#: lib/claper_web/live/event_live/manage.html.heex:408
#: lib/claper_web/live/event_live/manage.html.heex:484
#: lib/claper_web/live/event_live/manage.html.heex:460
#: lib/claper_web/live/event_live/manage.html.heex:536
#: lib/claper_web/live/event_live/manage.html.heex:606
#, elixir-autogen, elixir-format
msgid "Active"
msgstr "Active"
@@ -454,12 +458,12 @@ msgstr "Active"
msgid "Changing your file will remove all interaction elements like polls associated."
msgstr "Changing your file will remove all interaction elements like polls associated."
#: lib/claper_web/live/event_live/manage.html.heex:584
#: lib/claper_web/live/event_live/manage.html.heex:708
#, elixir-autogen, elixir-format
msgid "Messages from attendees will appear here."
msgstr "Messages from attendees will appear here."
#: lib/claper_web/live/event_live/manage.html.heex:770
#: lib/claper_web/live/event_live/manage.html.heex:894
#, elixir-autogen, elixir-format
msgid "On screen settings"
msgstr "On screen settings"
@@ -484,19 +488,20 @@ msgstr "Start"
msgid "Press <strong>F</strong> in the presentation window to enable fullscreen"
msgstr "Press <strong>F</strong> in the presentation window to enable fullscreen"
#: lib/claper_web/live/event_live/show.html.heex:298
#: lib/claper_web/live/event_live/show.html.heex:316
#, elixir-autogen, elixir-format
msgid "Ask, comment..."
msgstr "Ask, comment..."
#: lib/claper_web/live/event_live/manage.html.heex:556
#: lib/claper_web/live/event_live/manage.html.heex:680
#: lib/claper_web/live/stat_live/index.html.heex:71
#, elixir-autogen, elixir-format
msgid "Messages"
msgstr "Messages"
#: lib/claper_web/live/event_live/manage.html.heex:416
#: lib/claper_web/live/event_live/manage.html.heex:492
#: lib/claper_web/live/event_live/manage.html.heex:468
#: lib/claper_web/live/event_live/manage.html.heex:544
#: lib/claper_web/live/event_live/manage.html.heex:614
#, elixir-autogen, elixir-format
msgid "Set active"
msgstr "Set active"
@@ -532,26 +537,26 @@ msgstr "If youre having trouble with the button above, copy and paste the URL
msgid "You can change your email by visiting the URL below"
msgstr "You can change your email by visiting the URL below"
#: lib/claper_web/live/event_live/manage.html.heex:525
#: lib/claper_web/live/event_live/manage.html.heex:649
#, elixir-autogen, elixir-format, fuzzy
msgid "Add interaction"
msgstr "Add interaction"
#: lib/claper_web/live/event_live/manage.html.heex:607
#: lib/claper_web/live/event_live/manage.html.heex:622
#: lib/claper_web/live/event_live/manage.html.heex:731
#: lib/claper_web/live/event_live/manage.html.heex:746
#, elixir-autogen, elixir-format
msgid "Blocking this user will delete all his messages and he will not be able to join again, confirm ?"
msgstr "Blocking this user will delete all his messages and he will not be able to join again, confirm ?"
#: lib/claper_web/live/event_live/show.ex:50
#: lib/claper_web/live/event_live/show.ex:197
#: lib/claper_web/live/event_live/show.ex:212
#: lib/claper_web/live/event_live/show.ex:198
#: lib/claper_web/live/event_live/show.ex:213
#, elixir-autogen, elixir-format
msgid "You have been banned from this event"
msgstr "You have been banned from this event"
#: lib/claper_web/live/event_live/manage.html.heex:601
#: lib/claper_web/live/event_live/manage.html.heex:616
#: lib/claper_web/live/event_live/manage.html.heex:725
#: lib/claper_web/live/event_live/manage.html.heex:740
#, elixir-autogen, elixir-format
msgid "Ban"
msgstr "Ban"
@@ -645,7 +650,7 @@ msgstr "Event"
msgid "Interactions history"
msgstr "Interactions history"
#: lib/claper_web/live/stat_live/index.html.heex:260
#: lib/claper_web/live/stat_live/index.html.heex:271
#, elixir-autogen, elixir-format
msgid "No messages has been sent"
msgstr "No messages has been sent"
@@ -705,7 +710,7 @@ msgstr "Login"
msgid "Connect to your account"
msgstr "Connect to your account"
#: lib/claper_web/live/event_live/show.html.heex:423
#: lib/claper_web/live/event_live/show.html.heex:441
#, elixir-autogen, elixir-format
msgid "Or use the code:"
msgstr "Or use the code:"
@@ -776,34 +781,34 @@ msgstr "Add form to collect data from your public."
msgid "Current form"
msgstr "Current form"
#: lib/claper_web/live/event_live/manage.html.heex:277
#: lib/claper_web/live/event_live/manage.html.heex:308
#, elixir-autogen, elixir-format, fuzzy
msgid "Edit form"
msgstr "Edit form"
#: lib/claper_web/live/event_live/manage.html.heex:211
#: lib/claper_web/live/event_live/manage.html.heex:471
#: lib/claper_web/live/event_live/manage.html.heex:523
#: lib/claper_web/live/stat_live/index.html.heex:215
#, elixir-autogen, elixir-format
msgid "Form"
msgstr "Form"
#: lib/claper_web/live/event_live/manage.html.heex:559
#: lib/claper_web/live/event_live/manage.html.heex:683
#, elixir-autogen, elixir-format
msgid "Form submissions"
msgstr "Form submissions"
#: lib/claper_web/live/event_live/manage.html.heex:711
#: lib/claper_web/live/event_live/manage.html.heex:835
#, elixir-autogen, elixir-format
msgid "Form submissions from attendees will appear here."
msgstr "Form submissions from attendees will appear here."
#: lib/claper_web/live/event_live/manage.ex:456
#: lib/claper_web/live/event_live/manage.ex:528
#, elixir-autogen, elixir-format
msgid "Name"
msgstr "Name"
#: lib/claper_web/live/event_live/manage.html.heex:276
#: lib/claper_web/live/event_live/manage.html.heex:307
#, elixir-autogen, elixir-format
msgid "New form"
msgstr "New form"
@@ -828,7 +833,7 @@ msgstr "Submit"
msgid "Text"
msgstr "Text"
#: lib/claper_web/live/event_live/manage.html.heex:736
#: lib/claper_web/live/event_live/manage.html.heex:860
#, elixir-autogen, elixir-format
msgid "This cannot be undone, confirm ?"
msgstr "This cannot be undone, confirm ?"
@@ -868,22 +873,22 @@ msgstr "Select one or multiple options"
msgid "Multiple answers"
msgstr "Multiple answers"
#: lib/claper_web/live/event_live/manage.html.heex:244
#: lib/claper_web/live/event_live/manage.html.heex:275
#, elixir-autogen, elixir-format
msgid "Import all interactions from another presentation"
msgstr "Import all interactions from another presentation"
#: lib/claper_web/live/event_live/manage.ex:183
#: lib/claper_web/live/event_live/manage.ex:202
#, elixir-autogen, elixir-format
msgid "Interactions import failed"
msgstr "Interactions import failed"
#: lib/claper_web/live/event_live/manage.ex:176
#: lib/claper_web/live/event_live/manage.ex:195
#, elixir-autogen, elixir-format
msgid "Interactions imported successfully"
msgstr "Interactions imported successfully"
#: lib/claper_web/live/event_live/manage.html.heex:295
#: lib/claper_web/live/event_live/manage.html.heex:347
#, elixir-autogen, elixir-format
msgid "Select presentation"
msgstr "Select presentation"
@@ -893,55 +898,55 @@ msgstr "Select presentation"
msgid "PDF, PPT, PPTX up to %{size} MB"
msgstr "PDF, PPT, PPTX up to %{size} MB"
#: lib/claper_web/live/event_live/manage.html.heex:796
#: lib/claper_web/live/event_live/manage.html.heex:920
#, elixir-autogen, elixir-format
msgid "Attendees settings"
msgstr "Attendees settings"
#: lib/claper_web/live/event_live/manage.html.heex:800
#: lib/claper_web/live/event_live/manage.html.heex:924
#, elixir-autogen, elixir-format
msgid "Enable messages"
msgstr "Enable messages"
#: lib/claper_web/live/event_live/manage.html.heex:777
#: lib/claper_web/live/event_live/manage.html.heex:901
#, elixir-autogen, elixir-format
msgid "Show instructions"
msgstr "Show instructions"
#: lib/claper_web/live/event_live/manage.html.heex:782
#: lib/claper_web/live/event_live/manage.html.heex:906
#, elixir-autogen, elixir-format
msgid "Show messages"
msgstr "Show messages"
#: lib/claper_web/live/event_live/manage.html.heex:791
#: lib/claper_web/live/event_live/manage.html.heex:915
#, elixir-autogen, elixir-format
msgid "Show poll results"
msgstr "Show poll results"
#: lib/claper_web/live/event_live/show.html.heex:318
#: lib/claper_web/live/event_live/show.html.heex:336
#, elixir-autogen, elixir-format
msgid "Messages deactivated"
msgstr "Messages deactivated"
#: lib/claper_web/live/event_live/show.html.heex:161
#: lib/claper_web/live/event_live/show.html.heex:182
#: lib/claper_web/live/event_live/show.html.heex:282
#: lib/claper_web/live/event_live/show.html.heex:179
#: lib/claper_web/live/event_live/show.html.heex:200
#: lib/claper_web/live/event_live/show.html.heex:300
#, elixir-autogen, elixir-format
msgid "Anonymous"
msgstr "Anonymous"
#: lib/claper_web/live/event_live/show.html.heex:208
#: lib/claper_web/live/event_live/show.html.heex:226
#, elixir-autogen, elixir-format
msgid "Close"
msgstr "Close"
#: lib/claper_web/live/event_live/manage.html.heex:808
#: lib/claper_web/live/event_live/manage.html.heex:932
#, elixir-autogen, elixir-format, fuzzy
msgid "Enable anonymous messages"
msgstr "Enable anonymous messages"
#: lib/claper_web/live/event_live/show.html.heex:189
#: lib/claper_web/live/event_live/show.html.heex:234
#: lib/claper_web/live/event_live/show.html.heex:207
#: lib/claper_web/live/event_live/show.html.heex:252
#, elixir-autogen, elixir-format
msgid "Enter your name"
msgstr ""
@@ -951,12 +956,12 @@ msgstr ""
msgid "Or go to %{url} and use the code:"
msgstr "Or go to %{url} and use the code:"
#: lib/claper_web/live/event_live/show.html.heex:202
#: lib/claper_web/live/event_live/show.html.heex:220
#, elixir-autogen, elixir-format
msgid "Use your name"
msgstr "Use your name"
#: lib/claper_web/live/event_live/show.html.heex:182
#: lib/claper_web/live/event_live/show.html.heex:200
#, elixir-autogen, elixir-format
msgid "disabled"
msgstr "disabled"
@@ -966,6 +971,57 @@ msgstr "disabled"
msgid "Account creation is disabled"
msgstr ""
#: lib/claper_web/live/event_live/manage.html.heex:244
#, elixir-autogen, elixir-format
msgid "Add a Youtube video or any web content."
msgstr ""
#: lib/claper_web/live/embed_live/form_component.html.heex:23
#, elixir-autogen, elixir-format
msgid "Content of your embed"
msgstr ""
#: lib/claper_web/live/event_live/embed_component.ex:59
#, elixir-autogen, elixir-format, fuzzy
msgid "Current embed"
msgstr ""
#: lib/claper_web/live/event_live/manage.html.heex:329
#, elixir-autogen, elixir-format
msgid "Edit Embed"
msgstr ""
#: lib/claper_web/live/event_live/manage.html.heex:593
#: lib/claper_web/live/stat_live/index.html.heex:257
#, elixir-autogen, elixir-format
msgid "Embed"
msgstr ""
#: lib/claper_web/live/event_live/manage.html.heex:242
#, elixir-autogen, elixir-format
msgid "Embeded"
msgstr ""
#: lib/claper_web/live/event_live/manage.html.heex:328
#, elixir-autogen, elixir-format
msgid "New Embed"
msgstr ""
#: lib/claper_web/live/event_live/embed_component.ex:36
#, elixir-autogen, elixir-format, fuzzy
msgid "See current embed"
msgstr ""
#: lib/claper_web/live/embed_live/form_component.html.heex:49
#, elixir-autogen, elixir-format
msgid "This will delete the embed, are you sure?"
msgstr ""
#: lib/claper_web/live/embed_live/form_component.html.heex:14
#, elixir-autogen, elixir-format, fuzzy
msgid "Title of your embed"
msgstr ""
#: lib/claper_web/templates/user_reset_password/edit.html.heex:51
#, elixir-autogen, elixir-format
msgid "Confirm new password"

View File

@@ -15,7 +15,7 @@ msgstr ""
msgid "Settings"
msgstr "Paramètres"
#: lib/claper_web/live/event_live/manage.ex:457
#: lib/claper_web/live/event_live/manage.ex:529
#: lib/claper_web/live/form_live/form_component.html.heex:37
#: lib/claper_web/live/user_settings_live/show.html.heex:34
#: lib/claper_web/templates/user_registration/new.html.heex:34
@@ -78,22 +78,22 @@ msgstr "Nous vous avons envoyé un email à"
msgid "Your personal informations only visible by you"
msgstr "Vos informations personnelles ne sont visibles que par vous"
#: lib/claper_web/live/event_live/show.html.heex:387
#: lib/claper_web/live/event_live/show.html.heex:405
#, elixir-autogen, elixir-format
msgid "days"
msgstr "jours"
#: lib/claper_web/live/event_live/show.html.heex:393
#: lib/claper_web/live/event_live/show.html.heex:411
#, elixir-autogen, elixir-format
msgid "hours"
msgstr "heures"
#: lib/claper_web/live/event_live/show.html.heex:399
#: lib/claper_web/live/event_live/show.html.heex:417
#, elixir-autogen, elixir-format
msgid "minutes"
msgstr "minutes"
#: lib/claper_web/live/event_live/show.html.heex:118
#: lib/claper_web/live/event_live/show.html.heex:136
#, elixir-autogen, elixir-format
msgid "Be the first to react !"
msgstr "Soyez le premier à réagir !"
@@ -101,7 +101,7 @@ msgstr "Soyez le premier à réagir !"
#: lib/claper_web/live/event_live/event_card_component.ex:98
#: lib/claper_web/live/event_live/join.ex:42
#: lib/claper_web/live/event_live/join.html.heex:106
#: lib/claper_web/live/event_live/show.html.heex:239
#: lib/claper_web/live/event_live/show.html.heex:257
#, elixir-autogen, elixir-format
msgid "Join"
msgstr "Rejoindre"
@@ -119,7 +119,7 @@ msgstr "Tableau de bord"
msgid "Host"
msgstr "Animateur"
#: lib/claper_web/live/event_live/show.html.heex:405
#: lib/claper_web/live/event_live/show.html.heex:423
#, elixir-autogen, elixir-format
msgid "seconds"
msgstr "secondes"
@@ -171,7 +171,7 @@ msgid "Name of your presentation"
msgstr "Nom de votre présentation"
#: lib/claper_web/live/event_live/presenter.html.heex:21
#: lib/claper_web/live/event_live/show.html.heex:414
#: lib/claper_web/live/event_live/show.html.heex:432
#, elixir-autogen, elixir-format
msgid "Scan to interact in real-time"
msgstr "Scannez pour interagir en temps réel"
@@ -213,7 +213,7 @@ msgstr "Retourner à l'accueil"
msgid "Created successfully"
msgstr "Mis à jour avec succès"
#: lib/claper_web/live/event_live/manage.ex:23
#: lib/claper_web/live/event_live/manage.ex:24
#: lib/claper_web/live/event_live/presenter.ex:21
#: lib/claper_web/live/event_live/show.ex:24
#, elixir-autogen, elixir-format
@@ -228,6 +228,7 @@ msgstr "La présentation n'existe pas"
msgid "Edit"
msgstr "Modifier"
#: lib/claper_web/live/embed_live/form_component.html.heex:38
#: lib/claper_web/live/event_live/event_form_component.html.heex:18
#: lib/claper_web/live/event_live/event_form_component.html.heex:25
#: lib/claper_web/live/event_live/index.ex:71
@@ -238,10 +239,11 @@ msgstr "Modifier"
msgid "Create"
msgstr "Créer"
#: lib/claper_web/live/embed_live/form_component.html.heex:43
#: lib/claper_web/live/event_live/event_card_component.ex:171
#: lib/claper_web/live/event_live/event_form_component.html.heex:30
#: lib/claper_web/live/event_live/manage.html.heex:631
#: lib/claper_web/live/event_live/manage.html.heex:731
#: lib/claper_web/live/event_live/manage.html.heex:755
#: lib/claper_web/live/event_live/manage.html.heex:855
#: lib/claper_web/live/event_live/post_component.ex:44
#: lib/claper_web/live/event_live/post_component.ex:116
#: lib/claper_web/live/form_live/form_component.html.heex:103
@@ -250,6 +252,7 @@ msgstr "Créer"
msgid "Delete"
msgstr "Supprimer"
#: lib/claper_web/live/embed_live/form_component.html.heex:39
#: lib/claper_web/live/event_live/event_form_component.html.heex:17
#: lib/claper_web/live/event_live/event_form_component.html.heex:24
#: lib/claper_web/live/form_live/form_component.html.heex:99
@@ -373,12 +376,12 @@ msgstr "Changer le fichier"
msgid "Presentation replaced"
msgstr "Présentation remplacée"
#: lib/claper_web/live/event_live/manage.html.heex:256
#: lib/claper_web/live/event_live/manage.html.heex:287
#, elixir-autogen, elixir-format
msgid "Edit poll"
msgstr "Modifier le sondage"
#: lib/claper_web/live/event_live/manage.html.heex:255
#: lib/claper_web/live/event_live/manage.html.heex:286
#, elixir-autogen, elixir-format
msgid "New poll"
msgstr "Nouveau sondage"
@@ -399,7 +402,7 @@ msgid "Add poll to know opinion of your public."
msgstr "Ajoutez un sondage pour connaître l'opinion de votre public."
#: lib/claper_web/live/event_live/manage.html.heex:174
#: lib/claper_web/live/event_live/manage.html.heex:395
#: lib/claper_web/live/event_live/manage.html.heex:447
#, elixir-autogen, elixir-format
msgid "Poll"
msgstr "Sondage"
@@ -444,8 +447,9 @@ msgstr "Adresse email"
msgid "Present/Customize"
msgstr "Présenter/Personnaliser"
#: lib/claper_web/live/event_live/manage.html.heex:408
#: lib/claper_web/live/event_live/manage.html.heex:484
#: lib/claper_web/live/event_live/manage.html.heex:460
#: lib/claper_web/live/event_live/manage.html.heex:536
#: lib/claper_web/live/event_live/manage.html.heex:606
#, elixir-autogen, elixir-format
msgid "Active"
msgstr "Actif"
@@ -455,12 +459,12 @@ msgstr "Actif"
msgid "Changing your file will remove all interaction elements like polls associated."
msgstr "La modification de votre fichier supprimera tous les éléments d'interaction comme les sondages associés."
#: lib/claper_web/live/event_live/manage.html.heex:584
#: lib/claper_web/live/event_live/manage.html.heex:708
#, elixir-autogen, elixir-format
msgid "Messages from attendees will appear here."
msgstr "Les messages des participants apparaîtront ici."
#: lib/claper_web/live/event_live/manage.html.heex:770
#: lib/claper_web/live/event_live/manage.html.heex:894
#, elixir-autogen, elixir-format
msgid "On screen settings"
msgstr "Paramètres écran"
@@ -485,19 +489,20 @@ msgstr "Démarrer"
msgid "Press <strong>F</strong> in the presentation window to enable fullscreen"
msgstr "Appuyez sur <strong>F</strong> dans la fenêtre de présentation pour activer le plein écran"
#: lib/claper_web/live/event_live/show.html.heex:298
#: lib/claper_web/live/event_live/show.html.heex:316
#, elixir-autogen, elixir-format
msgid "Ask, comment..."
msgstr "Questionnez, commentez..."
#: lib/claper_web/live/event_live/manage.html.heex:556
#: lib/claper_web/live/event_live/manage.html.heex:680
#: lib/claper_web/live/stat_live/index.html.heex:71
#, elixir-autogen, elixir-format
msgid "Messages"
msgstr "Messages"
#: lib/claper_web/live/event_live/manage.html.heex:416
#: lib/claper_web/live/event_live/manage.html.heex:492
#: lib/claper_web/live/event_live/manage.html.heex:468
#: lib/claper_web/live/event_live/manage.html.heex:544
#: lib/claper_web/live/event_live/manage.html.heex:614
#, elixir-autogen, elixir-format
msgid "Set active"
msgstr "Activer"
@@ -533,26 +538,26 @@ msgstr "Si vous rencontrez des difficultés avec le bouton ci-dessus, copiez et
msgid "You can change your email by visiting the URL below"
msgstr "Vous pouvez modifier votre email en visitant l'URL ci-dessous"
#: lib/claper_web/live/event_live/manage.html.heex:525
#: lib/claper_web/live/event_live/manage.html.heex:649
#, elixir-autogen, elixir-format, fuzzy
msgid "Add interaction"
msgstr "Ajouter une interaction"
#: lib/claper_web/live/event_live/manage.html.heex:607
#: lib/claper_web/live/event_live/manage.html.heex:622
#: lib/claper_web/live/event_live/manage.html.heex:731
#: lib/claper_web/live/event_live/manage.html.heex:746
#, elixir-autogen, elixir-format
msgid "Blocking this user will delete all his messages and he will not be able to join again, confirm ?"
msgstr "Bloquer cet utilisateur supprimera tous ses messages et il ne pourra pas rejoindre à nouveau, confirmer ?"
#: lib/claper_web/live/event_live/show.ex:50
#: lib/claper_web/live/event_live/show.ex:197
#: lib/claper_web/live/event_live/show.ex:212
#: lib/claper_web/live/event_live/show.ex:198
#: lib/claper_web/live/event_live/show.ex:213
#, elixir-autogen, elixir-format
msgid "You have been banned from this event"
msgstr "Vous avez été banni de cet événement"
#: lib/claper_web/live/event_live/manage.html.heex:601
#: lib/claper_web/live/event_live/manage.html.heex:616
#: lib/claper_web/live/event_live/manage.html.heex:725
#: lib/claper_web/live/event_live/manage.html.heex:740
#, elixir-autogen, elixir-format
msgid "Ban"
msgstr "Bannir"
@@ -648,7 +653,7 @@ msgstr "Événement"
msgid "Interactions history"
msgstr "Historique des interactions"
#: lib/claper_web/live/stat_live/index.html.heex:260
#: lib/claper_web/live/stat_live/index.html.heex:271
#, elixir-autogen, elixir-format
msgid "No messages has been sent"
msgstr "Aucun message n'a été envoyé"
@@ -709,7 +714,7 @@ msgstr "Connexion"
msgid "Connect to your account"
msgstr "Connectez-vous à votre compte"
#: lib/claper_web/live/event_live/show.html.heex:423
#: lib/claper_web/live/event_live/show.html.heex:441
#, elixir-autogen, elixir-format
msgid "Or use the code:"
msgstr "Ou utilisez le code:"
@@ -781,34 +786,34 @@ msgstr "Ajoutez un formulaire pour recueillir les données de votre public."
msgid "Current form"
msgstr "Sondage actuel"
#: lib/claper_web/live/event_live/manage.html.heex:277
#: lib/claper_web/live/event_live/manage.html.heex:308
#, elixir-autogen, elixir-format, fuzzy
msgid "Edit form"
msgstr "Modifier"
#: lib/claper_web/live/event_live/manage.html.heex:211
#: lib/claper_web/live/event_live/manage.html.heex:471
#: lib/claper_web/live/event_live/manage.html.heex:523
#: lib/claper_web/live/stat_live/index.html.heex:215
#, elixir-autogen, elixir-format
msgid "Form"
msgstr "Formulaire"
#: lib/claper_web/live/event_live/manage.html.heex:559
#: lib/claper_web/live/event_live/manage.html.heex:683
#, elixir-autogen, elixir-format
msgid "Form submissions"
msgstr "Soumissions de formulaire"
#: lib/claper_web/live/event_live/manage.html.heex:711
#: lib/claper_web/live/event_live/manage.html.heex:835
#, elixir-autogen, elixir-format
msgid "Form submissions from attendees will appear here."
msgstr "Les formulaires soumis par les participants apparaîtront ici."
#: lib/claper_web/live/event_live/manage.ex:456
#: lib/claper_web/live/event_live/manage.ex:528
#, elixir-autogen, elixir-format
msgid "Name"
msgstr "Nom"
#: lib/claper_web/live/event_live/manage.html.heex:276
#: lib/claper_web/live/event_live/manage.html.heex:307
#, elixir-autogen, elixir-format
msgid "New form"
msgstr "Nouveau formulaire"
@@ -833,7 +838,7 @@ msgstr "Soumettre"
msgid "Text"
msgstr "Texte"
#: lib/claper_web/live/event_live/manage.html.heex:736
#: lib/claper_web/live/event_live/manage.html.heex:860
#, elixir-autogen, elixir-format
msgid "This cannot be undone, confirm ?"
msgstr "Cela ne peut pas être annulé, confirmez-vous ?"
@@ -873,22 +878,22 @@ msgstr "Sélectionner une ou plusieurs options"
msgid "Multiple answers"
msgstr "Réponses multiples"
#: lib/claper_web/live/event_live/manage.html.heex:244
#: lib/claper_web/live/event_live/manage.html.heex:275
#, elixir-autogen, elixir-format
msgid "Import all interactions from another presentation"
msgstr "Importer toutes les interactions d'une autre présentation"
#: lib/claper_web/live/event_live/manage.ex:183
#: lib/claper_web/live/event_live/manage.ex:202
#, elixir-autogen, elixir-format
msgid "Interactions import failed"
msgstr "Échec de l'importation d'interactions"
#: lib/claper_web/live/event_live/manage.ex:176
#: lib/claper_web/live/event_live/manage.ex:195
#, elixir-autogen, elixir-format
msgid "Interactions imported successfully"
msgstr "Interactions importées avec succès"
#: lib/claper_web/live/event_live/manage.html.heex:295
#: lib/claper_web/live/event_live/manage.html.heex:347
#, elixir-autogen, elixir-format
msgid "Select presentation"
msgstr "Sélectionnez la présentation"
@@ -898,55 +903,55 @@ msgstr "Sélectionnez la présentation"
msgid "PDF, PPT, PPTX up to %{size} MB"
msgstr "PDF, PPT, PPTX jusqu'à %{size} MB"
#: lib/claper_web/live/event_live/manage.html.heex:796
#: lib/claper_web/live/event_live/manage.html.heex:920
#, elixir-autogen, elixir-format
msgid "Attendees settings"
msgstr "Paramètres participants"
#: lib/claper_web/live/event_live/manage.html.heex:800
#: lib/claper_web/live/event_live/manage.html.heex:924
#, elixir-autogen, elixir-format
msgid "Enable messages"
msgstr "Activer messages"
#: lib/claper_web/live/event_live/manage.html.heex:777
#: lib/claper_web/live/event_live/manage.html.heex:901
#, elixir-autogen, elixir-format
msgid "Show instructions"
msgstr "Afficher instructions"
#: lib/claper_web/live/event_live/manage.html.heex:782
#: lib/claper_web/live/event_live/manage.html.heex:906
#, elixir-autogen, elixir-format
msgid "Show messages"
msgstr "Afficher messages"
#: lib/claper_web/live/event_live/manage.html.heex:791
#: lib/claper_web/live/event_live/manage.html.heex:915
#, elixir-autogen, elixir-format
msgid "Show poll results"
msgstr "Afficher résultats sondage"
#: lib/claper_web/live/event_live/show.html.heex:318
#: lib/claper_web/live/event_live/show.html.heex:336
#, elixir-autogen, elixir-format
msgid "Messages deactivated"
msgstr "Messages désactivés"
#: lib/claper_web/live/event_live/show.html.heex:161
#: lib/claper_web/live/event_live/show.html.heex:182
#: lib/claper_web/live/event_live/show.html.heex:282
#: lib/claper_web/live/event_live/show.html.heex:179
#: lib/claper_web/live/event_live/show.html.heex:200
#: lib/claper_web/live/event_live/show.html.heex:300
#, elixir-autogen, elixir-format
msgid "Anonymous"
msgstr "Anonyme"
#: lib/claper_web/live/event_live/show.html.heex:208
#: lib/claper_web/live/event_live/show.html.heex:226
#, elixir-autogen, elixir-format
msgid "Close"
msgstr "Fermer"
#: lib/claper_web/live/event_live/manage.html.heex:808
#: lib/claper_web/live/event_live/manage.html.heex:932
#, elixir-autogen, elixir-format, fuzzy
msgid "Enable anonymous messages"
msgstr "Activer messages anonymes"
#: lib/claper_web/live/event_live/show.html.heex:189
#: lib/claper_web/live/event_live/show.html.heex:234
#: lib/claper_web/live/event_live/show.html.heex:207
#: lib/claper_web/live/event_live/show.html.heex:252
#, elixir-autogen, elixir-format
msgid "Enter your name"
msgstr "Entrer votre nom"
@@ -956,12 +961,12 @@ msgstr "Entrer votre nom"
msgid "Or go to %{url} and use the code:"
msgstr "Ou allez sur %{url} et utilisez le code:"
#: lib/claper_web/live/event_live/show.html.heex:202
#: lib/claper_web/live/event_live/show.html.heex:220
#, elixir-autogen, elixir-format
msgid "Use your name"
msgstr "Utiliser votre nom"
#: lib/claper_web/live/event_live/show.html.heex:182
#: lib/claper_web/live/event_live/show.html.heex:200
#, elixir-autogen, elixir-format
msgid "disabled"
msgstr "désactivé"
@@ -971,6 +976,57 @@ msgstr "désactivé"
msgid "Account creation is disabled"
msgstr "La création de compte est désactivée"
#: lib/claper_web/live/event_live/manage.html.heex:244
#, elixir-autogen, elixir-format
msgid "Add a Youtube video or any web content."
msgstr "Ajoutez une vidéo Youtube ou tout autre contenu web."
#: lib/claper_web/live/embed_live/form_component.html.heex:23
#, elixir-autogen, elixir-format
msgid "Content of your embed"
msgstr "Contenu de votre intégration"
#: lib/claper_web/live/event_live/embed_component.ex:59
#, elixir-autogen, elixir-format, fuzzy
msgid "Current embed"
msgstr "Intégration actuelle"
#: lib/claper_web/live/event_live/manage.html.heex:329
#, elixir-autogen, elixir-format
msgid "Edit Embed"
msgstr "Modifier Intégrer"
#: lib/claper_web/live/event_live/manage.html.heex:593
#: lib/claper_web/live/stat_live/index.html.heex:257
#, elixir-autogen, elixir-format
msgid "Embed"
msgstr "Intégrer"
#: lib/claper_web/live/event_live/manage.html.heex:242
#, elixir-autogen, elixir-format
msgid "Embeded"
msgstr "Intégré"
#: lib/claper_web/live/event_live/manage.html.heex:328
#, elixir-autogen, elixir-format
msgid "New Embed"
msgstr "Nouvelle intégration"
#: lib/claper_web/live/event_live/embed_component.ex:36
#, elixir-autogen, elixir-format, fuzzy
msgid "See current embed"
msgstr "Voir l'intégration actuelle"
#: lib/claper_web/live/embed_live/form_component.html.heex:49
#, elixir-autogen, elixir-format
msgid "This will delete the embed, are you sure?"
msgstr "Cela supprimera l'intégration, êtes-vous sûr?"
#: lib/claper_web/live/embed_live/form_component.html.heex:14
#, elixir-autogen, elixir-format, fuzzy
msgid "Title of your embed"
msgstr "Titre de votre intégration"
#: lib/claper_web/templates/user_reset_password/edit.html.heex:51
#, elixir-autogen, elixir-format
msgid "Confirm new password"

View File

@@ -0,0 +1,16 @@
defmodule Claper.Repo.Migrations.CreateEmbeds do
use Ecto.Migration
def change do
create table(:embeds) do
add :title, :string, null: false
add :content, :text, null: false
add :position, :integer, default: 0
add :enabled, :boolean, default: true
add :attendee_visibility, :boolean, default: false
add :presentation_file_id, references(:presentation_files, on_delete: :nilify_all)
timestamps()
end
end
end

View File

@@ -0,0 +1,99 @@
defmodule Claper.EmbedsTest do
use Claper.DataCase
alias Claper.Embeds
describe "embeds" do
alias Claper.Embeds.Embed
import Claper.{EmbedsFixtures, PresentationsFixtures}
@invalid_attrs %{title: nil, content: nil}
test "list_embeds/1 returns all embeds from a presentation" do
presentation_file = presentation_file_fixture()
embed = embed_fixture(%{presentation_file_id: presentation_file.id})
assert Embeds.list_embeds(presentation_file.id) == [embed]
end
test "list_embeds_at_position/2 returns all embeds from a presentation at a given position" do
presentation_file = presentation_file_fixture()
embed = embed_fixture(%{presentation_file_id: presentation_file.id, position: 5})
assert Embeds.list_embeds_at_position(presentation_file.id, 5) == [embed]
end
test "get_embed!/1 returns the embed with given id" do
presentation_file = presentation_file_fixture()
embed = embed_fixture(%{presentation_file_id: presentation_file.id})
assert Embeds.get_embed!(embed.id) == embed
end
test "create_embed/1 with valid data creates a embed" do
presentation_file = presentation_file_fixture()
valid_attrs = %{
title: "some title",
content:
"<iframe src=\"https://www.youtube.com/embed/9bZkp7q19f0\" frameborder=\"0\" allowfullscreen></iframe>",
presentation_file_id: presentation_file.id,
position: 0
}
assert {:ok, %Embed{} = embed} = Embeds.create_embed(valid_attrs)
assert embed.title == "some title"
assert embed.content ==
"<iframe src=\"https://www.youtube.com/embed/9bZkp7q19f0\" frameborder=\"0\" allowfullscreen></iframe>"
end
test "create_embed/1 with invalid data returns error changeset" do
assert {:error, %Ecto.Changeset{}} = Embeds.create_embed(@invalid_attrs)
end
test "update_embed/3 with valid data updates the embed" do
presentation_file = presentation_file_fixture()
embed = embed_fixture(%{presentation_file_id: presentation_file.id})
update_attrs = %{
title: "some updated title",
content:
"<iframe src=\"https://www.youtube.com/embed/9bZkp7q19f0\" frameborder=\"0\"></iframe>"
}
assert {:ok, %Embed{} = embed} =
Embeds.update_embed(presentation_file.event_id, embed, update_attrs)
assert embed.title == "some updated title"
assert embed.content ==
"<iframe src=\"https://www.youtube.com/embed/9bZkp7q19f0\" frameborder=\"0\"></iframe>"
end
test "update_embed/3 with invalid data returns error changeset" do
presentation_file = presentation_file_fixture()
embed = embed_fixture(%{presentation_file_id: presentation_file.id})
assert {:error, %Ecto.Changeset{}} =
Embeds.update_embed(presentation_file.event_id, embed, @invalid_attrs)
assert embed == Embeds.get_embed!(embed.id)
end
test "delete_embed/2 deletes the embed" do
presentation_file = presentation_file_fixture()
embed = embed_fixture(%{presentation_file_id: presentation_file.id})
assert {:ok, %Embed{}} = Embeds.delete_embed(presentation_file.event_id, embed)
assert_raise Ecto.NoResultsError, fn -> Embeds.get_embed!(embed.id) end
end
test "change_embed/1 returns a embed changeset" do
presentation_file = presentation_file_fixture()
embed = embed_fixture(%{presentation_file_id: presentation_file.id})
assert %Ecto.Changeset{} = Embeds.change_embed(embed)
end
end
end

View File

@@ -0,0 +1,27 @@
defmodule Claper.EmbedsFixtures do
@moduledoc """
This module defines test helpers for creating
entities via the `Claper.Embeds` context.
"""
require Claper.UtilFixture
@doc """
Generate a embed.
"""
def embed_fixture(attrs \\ %{}, preload \\ []) do
{:ok, embed} =
attrs
|> Enum.into(%{
title: "some title",
content:
"<iframe src=\"https://www.youtube.com/embed/9bZkp7q19f0\" frameborder=\"0\" allowfullscreen></iframe>",
position: 0,
enabled: true,
attendee_visibility: true
})
|> Claper.Embeds.create_embed()
Claper.UtilFixture.merge_preload(embed, preload, %{})
end
end