2023-04-20 22:10:33 +02:00
|
|
|
<div
|
|
|
|
|
id="manager"
|
2023-11-23 13:58:44 +01:00
|
|
|
x-data={"{date:
|
|
|
|
|
moment.utc('#{@event.expired_at}').local().format('lll')}"}
|
2023-04-20 22:10:33 +02:00
|
|
|
phx-hook="Manager"
|
|
|
|
|
data-max-page={@event.presentation_file.length}
|
|
|
|
|
data-current-page={@state.position}
|
2026-02-09 19:20:08 +01:00
|
|
|
class="h-screen flex flex-col overflow-hidden bg-gray-50"
|
2023-04-20 22:10:33 +02:00
|
|
|
>
|
2026-02-09 19:20:08 +01:00
|
|
|
<!-- Settings Modal (Mobile) -->
|
2024-04-16 22:36:50 +02:00
|
|
|
<div
|
|
|
|
|
id="settings-modal"
|
2026-04-10 18:41:03 +02:00
|
|
|
class={["modal", "manage-modal", if(@settings_modal, do: "modal-open")]}
|
2024-04-16 22:36:50 +02:00
|
|
|
role="dialog"
|
|
|
|
|
aria-modal="true"
|
|
|
|
|
>
|
2026-03-13 18:37:13 +01:00
|
|
|
<div class="modal-box max-w-xl">
|
2024-07-11 12:53:47 +02:00
|
|
|
<button
|
2026-04-10 18:41:03 +02:00
|
|
|
phx-click="toggle-settings-modal"
|
|
|
|
|
class="btn btn-sm btn-circle btn-ghost absolute right-2 top-2"
|
2024-07-11 12:53:47 +02:00
|
|
|
>
|
2026-03-13 18:37:13 +01:00
|
|
|
×
|
2024-07-11 12:53:47 +02:00
|
|
|
</button>
|
2026-03-13 18:37:13 +01:00
|
|
|
<div id="settings-modal-content">
|
2024-04-16 22:36:50 +02:00
|
|
|
<.live_component
|
|
|
|
|
id="settings-modal-pane"
|
|
|
|
|
module={ClaperWeb.EventLive.ManagerSettingsComponent}
|
|
|
|
|
create={@create}
|
|
|
|
|
state={@state}
|
|
|
|
|
show_shortcut={false}
|
2024-12-21 10:09:29 -05:00
|
|
|
current_interaction={@current_interaction}
|
2024-04-16 22:36:50 +02:00
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2026-04-10 18:23:48 +02:00
|
|
|
<div class="modal-backdrop" phx-click="toggle-settings-modal">
|
2026-03-13 18:37:13 +01:00
|
|
|
<button>close</button>
|
|
|
|
|
</div>
|
2024-04-16 22:36:50 +02:00
|
|
|
</div>
|
2026-08-04 14:02:46 +07:00
|
|
|
|
2026-04-10 18:41:03 +02:00
|
|
|
<!-- Interaction Modal -->
|
2023-04-20 22:10:33 +02:00
|
|
|
<div
|
2025-07-07 23:00:30 +02:00
|
|
|
:if={@interaction_modal}
|
|
|
|
|
id="interaction-modal"
|
2026-04-10 18:41:03 +02:00
|
|
|
class="modal manage-modal modal-open"
|
2023-04-20 22:10:33 +02:00
|
|
|
role="dialog"
|
|
|
|
|
aria-modal="true"
|
|
|
|
|
>
|
2026-03-13 18:37:13 +01:00
|
|
|
<div class="modal-box max-w-xl p-0">
|
2026-04-10 18:41:03 +02:00
|
|
|
<button
|
|
|
|
|
phx-click="toggle-interaction-modal"
|
|
|
|
|
class="btn btn-sm btn-circle btn-ghost absolute right-2 top-2 z-10"
|
|
|
|
|
>
|
2026-03-13 18:37:13 +01:00
|
|
|
×
|
2023-04-20 22:10:33 +02:00
|
|
|
</button>
|
2024-07-11 12:53:47 +02:00
|
|
|
<div id="modal-content">
|
2023-11-23 13:58:44 +01:00
|
|
|
<%= if @create==nil do %>
|
2023-04-20 22:10:33 +02:00
|
|
|
<ul class="scroll-py-3 overflow-y-auto p-3" id="options" role="listbox">
|
|
|
|
|
<li id="option-1" role="option" tabindex="-1">
|
|
|
|
|
<a
|
|
|
|
|
data-phx-link="patch"
|
|
|
|
|
data-phx-link-state="push"
|
2024-04-06 11:48:47 +02:00
|
|
|
href={~p"/e/#{@event.code}/manage/add/poll"}
|
2023-04-20 22:10:33 +02:00
|
|
|
class="group flex select-none rounded-xl p-3 w-full hover:bg-gray-200 cursor-pointer"
|
|
|
|
|
>
|
2026-01-23 23:45:16 +01:00
|
|
|
<div class="flex h-12 w-12 flex-none text-white items-center justify-center rounded-lg bg-primary">
|
2023-04-20 22:10:33 +02:00
|
|
|
<svg
|
|
|
|
|
xmlns="http://www.w3.org/2000/svg"
|
2024-08-11 11:16:34 +02:00
|
|
|
class="h-7 w-7"
|
2023-04-20 22:10:33 +02:00
|
|
|
fill="none"
|
|
|
|
|
viewBox="0 0 24 24"
|
|
|
|
|
stroke="currentColor"
|
2024-04-06 11:48:47 +02:00
|
|
|
stroke-width="1.5"
|
2023-04-20 22:10:33 +02:00
|
|
|
>
|
|
|
|
|
<path
|
|
|
|
|
stroke-linecap="round"
|
|
|
|
|
stroke-linejoin="round"
|
|
|
|
|
d="M16 8v8m-4-5v5m-4-2v2m-2 4h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z"
|
|
|
|
|
/>
|
|
|
|
|
</svg>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="ml-4 flex-auto text-left">
|
2026-02-09 19:20:08 +01:00
|
|
|
<p class="font-medium text-gray-700">{gettext("Poll")}</p>
|
2023-04-20 22:10:33 +02:00
|
|
|
<p class="text-gray-500">
|
2025-07-03 14:55:23 +02:00
|
|
|
{gettext("Add poll to know opinion of your public.")}
|
2023-04-20 22:10:33 +02:00
|
|
|
</p>
|
|
|
|
|
</div>
|
|
|
|
|
</a>
|
|
|
|
|
</li>
|
|
|
|
|
<li id="option-2" role="option" tabindex="-1">
|
|
|
|
|
<a
|
|
|
|
|
data-phx-link="patch"
|
|
|
|
|
data-phx-link-state="push"
|
2024-04-06 11:48:47 +02:00
|
|
|
href={~p"/e/#{@event.code}/manage/add/form"}
|
2023-04-20 22:10:33 +02:00
|
|
|
class="group flex select-none rounded-xl p-3 w-full hover:bg-gray-200 cursor-pointer"
|
|
|
|
|
>
|
2026-01-23 23:45:16 +01:00
|
|
|
<div class="flex h-12 w-12 flex-none text-white items-center justify-center rounded-lg bg-primary">
|
2023-04-20 22:10:33 +02:00
|
|
|
<svg
|
|
|
|
|
xmlns="http://www.w3.org/2000/svg"
|
2024-08-11 11:16:34 +02:00
|
|
|
class="h-7 w-7"
|
|
|
|
|
fill="none"
|
2023-04-20 22:10:33 +02:00
|
|
|
viewBox="0 0 24 24"
|
|
|
|
|
stroke="currentColor"
|
2024-08-11 11:16:34 +02:00
|
|
|
stroke-width="1.5"
|
2023-04-20 22:10:33 +02:00
|
|
|
>
|
2024-08-11 11:16:34 +02:00
|
|
|
<path
|
|
|
|
|
stroke-linecap="round"
|
|
|
|
|
stroke-linejoin="round"
|
|
|
|
|
d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01"
|
|
|
|
|
/>
|
2023-04-20 22:10:33 +02:00
|
|
|
</svg>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="ml-4 flex-auto text-left">
|
2026-02-09 19:20:08 +01:00
|
|
|
<p class="font-medium text-gray-700">{gettext("Form")}</p>
|
2023-04-20 22:10:33 +02:00
|
|
|
<p class="text-gray-500">
|
2025-07-03 14:55:23 +02:00
|
|
|
{gettext("Add form to collect data from your public.")}
|
2023-04-20 22:10:33 +02:00
|
|
|
</p>
|
|
|
|
|
</div>
|
|
|
|
|
</a>
|
|
|
|
|
</li>
|
2023-11-23 16:36:39 +05:30
|
|
|
<li id="option-3" role="option" tabindex="-1">
|
|
|
|
|
<a
|
|
|
|
|
data-phx-link="patch"
|
|
|
|
|
data-phx-link-state="push"
|
2024-04-06 11:48:47 +02:00
|
|
|
href={~p"/e/#{@event.code}/manage/add/embed"}
|
2023-11-23 16:36:39 +05:30
|
|
|
class="group flex select-none rounded-xl p-3 w-full hover:bg-gray-200 cursor-pointer"
|
|
|
|
|
>
|
2026-01-23 23:45:16 +01:00
|
|
|
<div class="flex h-12 w-12 flex-none text-white items-center justify-center rounded-lg bg-primary">
|
2023-11-23 16:36:39 +05:30
|
|
|
<svg
|
|
|
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
|
|
|
fill="none"
|
|
|
|
|
viewBox="0 0 24 24"
|
|
|
|
|
stroke-width="1.5"
|
|
|
|
|
stroke="currentColor"
|
2024-08-11 11:16:34 +02:00
|
|
|
class="w-7 h-7"
|
2023-11-23 16:36:39 +05:30
|
|
|
>
|
|
|
|
|
<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">
|
2025-07-03 14:55:23 +02:00
|
|
|
<p class="font-medium text-gray-700">{gettext("Web content")}</p>
|
2023-11-23 16:36:39 +05:30
|
|
|
<p class="text-gray-500">
|
2025-07-03 14:55:23 +02:00
|
|
|
{gettext("Add a Youtube video or any web content.")}
|
2023-11-23 16:36:39 +05:30
|
|
|
</p>
|
|
|
|
|
</div>
|
|
|
|
|
</a>
|
|
|
|
|
</li>
|
2024-12-21 10:09:29 -05:00
|
|
|
<li id="option-4" role="option" tabindex="-1">
|
|
|
|
|
<a
|
|
|
|
|
data-phx-link="patch"
|
|
|
|
|
data-phx-link-state="push"
|
|
|
|
|
href={~p"/e/#{@event.code}/manage/add/quiz"}
|
|
|
|
|
class="group flex select-none rounded-xl p-3 w-full hover:bg-gray-200 cursor-pointer"
|
|
|
|
|
>
|
2026-01-23 23:45:16 +01:00
|
|
|
<div class="flex h-12 w-12 flex-none text-white items-center justify-center rounded-lg bg-primary">
|
2024-12-21 10:09:29 -05:00
|
|
|
<svg
|
|
|
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
|
|
|
fill="none"
|
|
|
|
|
viewBox="0 0 24 24"
|
|
|
|
|
stroke-width="1.5"
|
|
|
|
|
stroke="currentColor"
|
|
|
|
|
class="w-7 h-7"
|
|
|
|
|
>
|
|
|
|
|
<path
|
|
|
|
|
stroke-linecap="round"
|
2026-02-09 19:20:08 +01:00
|
|
|
stroke-linejoin="round"
|
2024-12-21 10:09:29 -05:00
|
|
|
d="M9 12.75 11.25 15 15 9.75M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"
|
|
|
|
|
/>
|
|
|
|
|
</svg>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="ml-4 flex-auto text-left">
|
2025-07-03 14:55:23 +02:00
|
|
|
<p class="font-medium text-gray-700">{gettext("Quiz")}</p>
|
2026-02-09 19:20:08 +01:00
|
|
|
<p class="text-gray-500">{gettext("Add a quiz to test knowledge.")}</p>
|
2024-12-21 10:09:29 -05:00
|
|
|
</div>
|
|
|
|
|
</a>
|
|
|
|
|
</li>
|
2026-02-22 09:36:34 +00:00
|
|
|
<li :if={@transcription_globally_enabled} id="option-5" role="option" tabindex="-1">
|
2026-02-20 14:13:16 +00:00
|
|
|
<a
|
2026-04-29 18:37:14 +02:00
|
|
|
:if={!(@transcription_config && @transcription_config.id)}
|
2026-02-20 14:13:16 +00:00
|
|
|
data-phx-link="patch"
|
|
|
|
|
data-phx-link-state="push"
|
|
|
|
|
href={~p"/e/#{@event.code}/manage/add/transcription"}
|
|
|
|
|
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-linear-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-7 h-7"
|
|
|
|
|
>
|
|
|
|
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" /><path d="M9 2m0 3a3 3 0 0 1 3 -3h0a3 3 0 0 1 3 3v5a3 3 0 0 1 -3 3h0a3 3 0 0 1 -3 -3z" /><path d="M5 10a7 7 0 0 0 14 0" /><path d="M8 21l8 0" /><path d="M12 17l0 4" />
|
|
|
|
|
</svg>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="ml-4 flex-auto text-left">
|
2026-04-29 18:37:14 +02:00
|
|
|
<div class="flex items-center gap-2">
|
|
|
|
|
<p class="font-medium text-gray-700">{gettext("Transcription")}</p>
|
|
|
|
|
<span class="badge badge-sm badge-soft badge-primary">
|
|
|
|
|
{gettext("Global")}
|
|
|
|
|
</span>
|
|
|
|
|
</div>
|
2024-12-21 10:09:29 -05:00
|
|
|
<p class="text-gray-500">
|
2026-02-20 14:13:16 +00:00
|
|
|
{gettext("Add real-time subtitles from your microphone.")}
|
2024-12-21 10:09:29 -05:00
|
|
|
</p>
|
|
|
|
|
</div>
|
|
|
|
|
</a>
|
2026-04-29 18:37:14 +02:00
|
|
|
<div
|
|
|
|
|
:if={@transcription_config && @transcription_config.id}
|
|
|
|
|
class="flex select-none rounded-xl p-3 w-full opacity-50 cursor-not-allowed"
|
|
|
|
|
aria-disabled="true"
|
|
|
|
|
>
|
|
|
|
|
<div class="flex h-12 w-12 flex-none text-white items-center justify-center rounded-lg bg-linear-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-7 h-7"
|
|
|
|
|
>
|
|
|
|
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" /><path d="M9 2m0 3a3 3 0 0 1 3 -3h0a3 3 0 0 1 3 3v5a3 3 0 0 1 -3 3h0a3 3 0 0 1 -3 -3z" /><path d="M5 10a7 7 0 0 0 14 0" /><path d="M8 21l8 0" /><path d="M12 17l0 4" />
|
|
|
|
|
</svg>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="ml-4 flex-auto text-left">
|
|
|
|
|
<div class="flex items-center gap-2">
|
|
|
|
|
<p class="font-medium text-gray-700">{gettext("Transcription")}</p>
|
|
|
|
|
<span class="badge badge-sm badge-soft badge-primary">
|
|
|
|
|
{gettext("Global")}
|
|
|
|
|
</span>
|
|
|
|
|
</div>
|
|
|
|
|
<p class="text-gray-500">
|
|
|
|
|
{gettext("Already added to this presentation.")}
|
|
|
|
|
</p>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2024-12-21 10:09:29 -05:00
|
|
|
</li>
|
2023-04-20 22:10:33 +02:00
|
|
|
</ul>
|
2023-04-20 22:06:49 +02:00
|
|
|
<% end %>
|
2023-11-23 13:58:44 +01:00
|
|
|
<%= if @create=="poll" do %>
|
2026-07-06 21:58:19 +02:00
|
|
|
<div class="scroll-py-3 overflow-y-auto p-6">
|
|
|
|
|
<p class="text-base font-bold text-secondary mb-5">
|
2025-07-03 14:55:23 +02:00
|
|
|
{case @create_action do
|
2023-04-20 22:10:33 +02:00
|
|
|
:new -> gettext("New poll")
|
|
|
|
|
:edit -> gettext("Edit poll")
|
2025-07-03 14:55:23 +02:00
|
|
|
end}
|
2023-04-20 22:10:33 +02:00
|
|
|
</p>
|
|
|
|
|
<.live_component
|
|
|
|
|
module={ClaperWeb.PollLive.FormComponent}
|
|
|
|
|
id="poll-create"
|
|
|
|
|
event_uuid={@event.uuid}
|
|
|
|
|
presentation_file={@event.presentation_file}
|
|
|
|
|
poll={@poll}
|
|
|
|
|
live_action={@create_action}
|
|
|
|
|
position={@state.position}
|
2024-04-06 11:48:47 +02:00
|
|
|
return_to={~p"/e/#{@event.code}/manage"}
|
2023-04-20 22:10:33 +02:00
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
<% end %>
|
2023-11-23 13:58:44 +01:00
|
|
|
<%= if @create=="form" do %>
|
2026-07-06 21:58:19 +02:00
|
|
|
<div class="scroll-py-3 overflow-y-auto p-6">
|
|
|
|
|
<p class="text-base font-bold text-secondary mb-5">
|
2025-07-03 14:55:23 +02:00
|
|
|
{case @create_action do
|
2023-04-20 22:10:33 +02:00
|
|
|
:new -> gettext("New form")
|
|
|
|
|
:edit -> gettext("Edit form")
|
2025-07-03 14:55:23 +02:00
|
|
|
end}
|
2023-04-20 22:10:33 +02:00
|
|
|
</p>
|
|
|
|
|
<.live_component
|
|
|
|
|
module={ClaperWeb.FormLive.FormComponent}
|
|
|
|
|
id="form-create"
|
|
|
|
|
event_uuid={@event.uuid}
|
|
|
|
|
presentation_file={@event.presentation_file}
|
|
|
|
|
form={@form}
|
|
|
|
|
live_action={@create_action}
|
|
|
|
|
position={@state.position}
|
2024-04-06 11:48:47 +02:00
|
|
|
return_to={~p"/e/#{@event.code}/manage"}
|
2023-04-20 22:10:33 +02:00
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
<% end %>
|
2023-11-23 16:36:39 +05:30
|
|
|
<%= if @create == "embed" do %>
|
2026-07-06 21:58:19 +02:00
|
|
|
<div class="scroll-py-3 overflow-y-auto p-6">
|
|
|
|
|
<p class="text-base font-bold text-secondary mb-5">
|
2025-07-03 14:55:23 +02:00
|
|
|
{case @create_action do
|
2023-11-23 12:29:21 +01:00
|
|
|
:new -> gettext("New web content")
|
|
|
|
|
:edit -> gettext("Edit web content")
|
2025-07-03 14:55:23 +02:00
|
|
|
end}
|
2023-11-23 16:36:39 +05:30
|
|
|
</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}
|
2024-04-06 11:48:47 +02:00
|
|
|
return_to={~p"/e/#{@event.code}/manage"}
|
2023-11-23 16:36:39 +05:30
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
<% end %>
|
2024-12-21 10:09:29 -05:00
|
|
|
<%= if @create=="quiz" do %>
|
2026-07-06 21:58:19 +02:00
|
|
|
<div class="scroll-py-3 overflow-y-auto p-6">
|
|
|
|
|
<p class="text-base font-bold text-secondary mb-5">
|
2025-07-03 14:55:23 +02:00
|
|
|
{case @create_action do
|
2024-12-21 10:09:29 -05:00
|
|
|
:new -> gettext("New quiz")
|
|
|
|
|
:edit -> gettext("Edit quiz")
|
2025-07-03 14:55:23 +02:00
|
|
|
end}
|
2024-12-21 10:09:29 -05:00
|
|
|
</p>
|
|
|
|
|
<.live_component
|
|
|
|
|
module={ClaperWeb.QuizLive.QuizComponent}
|
|
|
|
|
id="quiz-create"
|
|
|
|
|
event={@event}
|
|
|
|
|
presentation_file={@event.presentation_file}
|
|
|
|
|
quiz={@quiz}
|
|
|
|
|
live_action={@create_action}
|
|
|
|
|
position={@state.position}
|
|
|
|
|
return_to={~p"/e/#{@event.code}/manage"}
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
<% end %>
|
2026-02-20 14:13:16 +00:00
|
|
|
<%= if @create == "transcription" do %>
|
2026-07-06 22:16:29 +02:00
|
|
|
<div class="scroll-py-3 overflow-y-auto p-6">
|
|
|
|
|
<p class="text-base font-bold text-secondary mb-5">
|
2026-02-20 14:13:16 +00:00
|
|
|
{case @create_action do
|
|
|
|
|
:new -> gettext("New transcription")
|
|
|
|
|
:edit -> gettext("Edit transcription")
|
|
|
|
|
end}
|
|
|
|
|
</p>
|
|
|
|
|
<.live_component
|
|
|
|
|
module={ClaperWeb.TranscriptionLive.FormComponent}
|
|
|
|
|
id="transcription-create"
|
|
|
|
|
event_uuid={@event.uuid}
|
|
|
|
|
presentation_file={@event.presentation_file}
|
|
|
|
|
transcription_config={@transcription_config}
|
|
|
|
|
live_action={@create_action}
|
|
|
|
|
return_to={~p"/e/#{@event.code}/manage"}
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
<% end %>
|
2024-12-21 10:09:29 -05:00
|
|
|
|
|
|
|
|
<%= if @create == "import" do %>
|
|
|
|
|
<div class="scroll-py-3 overflow-y-auto bg-gray-100 p-3">
|
2026-02-09 19:20:08 +01:00
|
|
|
<p class="text-xl font-bold">{gettext("Select presentation")}</p>
|
2024-12-21 10:09:29 -05:00
|
|
|
<ul>
|
|
|
|
|
<%= for event <- @events do %>
|
|
|
|
|
<li class="my-3">
|
|
|
|
|
<button
|
|
|
|
|
phx-click="import"
|
|
|
|
|
phx-value-event={event.uuid}
|
|
|
|
|
class="bg-blue-500 text-white flex gap-x-2 items-center px-2 py-1 rounded-md"
|
|
|
|
|
>
|
|
|
|
|
<svg
|
|
|
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
|
|
|
fill="none"
|
|
|
|
|
viewBox="0 0 24 24"
|
|
|
|
|
stroke-width="1.5"
|
|
|
|
|
stroke="currentColor"
|
|
|
|
|
class="w-5 h-5"
|
|
|
|
|
>
|
|
|
|
|
<path
|
|
|
|
|
stroke-linecap="round"
|
|
|
|
|
stroke-linejoin="round"
|
|
|
|
|
d="M3 16.5v2.25A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75V16.5M16.5 12L12 16.5m0 0L7.5 12m4.5 4.5V3"
|
|
|
|
|
/>
|
|
|
|
|
</svg>
|
2026-02-09 19:20:08 +01:00
|
|
|
<span>{event.name}</span>
|
2024-12-21 10:09:29 -05:00
|
|
|
</button>
|
|
|
|
|
</li>
|
|
|
|
|
<% end %>
|
|
|
|
|
</ul>
|
|
|
|
|
</div>
|
|
|
|
|
<% end %>
|
2023-04-20 22:10:33 +02:00
|
|
|
</div>
|
2022-07-23 01:44:03 +02:00
|
|
|
</div>
|
2026-03-13 18:37:13 +01:00
|
|
|
<div class="modal-backdrop" phx-click="toggle-interaction-modal">
|
|
|
|
|
<button>close</button>
|
|
|
|
|
</div>
|
2022-07-23 01:44:03 +02:00
|
|
|
</div>
|
2026-08-04 14:02:46 +07:00
|
|
|
|
2026-04-10 18:41:03 +02:00
|
|
|
<!-- Header Bar -->
|
2026-02-10 17:22:35 +01:00
|
|
|
<header class="flex-shrink-0 flex items-center justify-between px-4 lg:px-8 py-5 bg-white">
|
2026-02-09 19:20:08 +01:00
|
|
|
<!-- Left: Back button, Title, and Code Badge -->
|
|
|
|
|
<div class="flex items-center gap-x-2">
|
|
|
|
|
<a
|
|
|
|
|
data-phx-link="patch"
|
|
|
|
|
data-phx-link-state="push"
|
|
|
|
|
href={~p"/events"}
|
|
|
|
|
class="btn btn-circle bg-primary-50 border-none hover:bg-primary-100"
|
|
|
|
|
>
|
2026-04-10 18:41:03 +02:00
|
|
|
<svg
|
|
|
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
|
|
|
class="w-4 h-4 text-secondary-500 rotate-180"
|
|
|
|
|
viewBox="0 0 16 16"
|
|
|
|
|
fill="none"
|
2024-04-06 11:48:47 +02:00
|
|
|
>
|
2026-04-10 18:41:03 +02:00
|
|
|
<path
|
|
|
|
|
d="M-0.000155798 8.91984L-0.000155623 6.91984L11.9998 6.91984L6.49984 1.41984L7.91985 -0.000157095L15.8398 7.91984L7.91984 15.8398L6.49984 14.4198L11.9998 8.91984L-0.000155798 8.91984Z"
|
|
|
|
|
fill="currentColor"
|
|
|
|
|
/>
|
2026-02-09 19:20:08 +01:00
|
|
|
</svg>
|
|
|
|
|
</a>
|
|
|
|
|
<div class="flex items-center gap-x-2">
|
2026-06-05 10:03:02 +02:00
|
|
|
<h1 class="text-base font-bold text-secondary-500 truncate max-w-[175px] md:max-w-none">
|
2026-02-09 19:20:08 +01:00
|
|
|
{@event.name}
|
|
|
|
|
</h1>
|
|
|
|
|
<span class="badge badge-primary text-white font-bold uppercase">
|
|
|
|
|
#{@event.code}
|
|
|
|
|
</span>
|
2024-04-06 11:48:47 +02:00
|
|
|
</div>
|
2026-02-09 19:20:08 +01:00
|
|
|
</div>
|
2026-08-04 14:02:46 +07:00
|
|
|
|
2026-04-10 18:41:03 +02:00
|
|
|
<!-- Center: Logo -->
|
2026-02-09 19:20:08 +01:00
|
|
|
<div class="hidden md:flex items-center justify-center absolute left-1/2 -translate-x-1/2 bg-white rounded-full p-2">
|
|
|
|
|
<img src="/images/logo.svg" alt="Claper" class="h-8" />
|
2024-04-06 11:48:47 +02:00
|
|
|
</div>
|
2026-08-04 14:02:46 +07:00
|
|
|
|
2026-04-10 18:41:03 +02:00
|
|
|
<!-- Right: Action Buttons -->
|
2026-02-09 19:20:08 +01:00
|
|
|
<div class="bg-white p-1 rounded-full shadow-lg flex items-center gap-x-2">
|
|
|
|
|
<button
|
|
|
|
|
phx-hook="OpenPresenter"
|
|
|
|
|
id={"openPresenter-#{@event.uuid}"}
|
|
|
|
|
data-url={~p"/e/#{@event.code}/presenter"}
|
|
|
|
|
type="button"
|
2026-04-06 13:45:21 +02:00
|
|
|
class="hidden lg:inline-flex btn btn-gradient"
|
2024-07-11 12:53:47 +02:00
|
|
|
>
|
2026-02-09 19:20:08 +01:00
|
|
|
<!-- Play icon -->
|
|
|
|
|
<svg
|
|
|
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
|
|
|
viewBox="0 0 24 24"
|
|
|
|
|
fill="currentColor"
|
|
|
|
|
class="w-5 h-5"
|
2025-12-06 10:31:28 +00:00
|
|
|
>
|
2026-02-09 19:20:08 +01:00
|
|
|
<path
|
|
|
|
|
fill-rule="evenodd"
|
|
|
|
|
d="M4.5 5.653c0-1.427 1.529-2.33 2.779-1.643l11.54 6.347c1.295.712 1.295 2.573 0 3.286L7.28 19.99c-1.25.687-2.779-.217-2.779-1.643V5.653Z"
|
|
|
|
|
clip-rule="evenodd"
|
2025-12-06 10:31:28 +00:00
|
|
|
/>
|
2026-02-09 19:20:08 +01:00
|
|
|
</svg>
|
|
|
|
|
{gettext("Open presentation")}
|
|
|
|
|
</button>
|
2026-04-10 18:41:03 +02:00
|
|
|
<a href={~p"/e/#{@event.code}"} target="_blank" class="hidden sm:flex btn btn-tertiary">
|
2026-02-09 19:20:08 +01:00
|
|
|
<!-- User icon -->
|
|
|
|
|
<svg
|
|
|
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
|
|
|
viewBox="0 0 24 24"
|
|
|
|
|
fill="currentColor"
|
|
|
|
|
class="w-5 h-5 text-gray-700"
|
|
|
|
|
>
|
|
|
|
|
<path
|
|
|
|
|
fill-rule="evenodd"
|
|
|
|
|
d="M8.25 6.75a3.75 3.75 0 1 1 7.5 0 3.75 3.75 0 0 1-7.5 0ZM15.75 9.75a3 3 0 1 1 6 0 3 3 0 0 1-6 0ZM2.25 9.75a3 3 0 1 1 6 0 3 3 0 0 1-6 0ZM6.31 15.117A6.745 6.745 0 0 1 12 12a6.745 6.745 0 0 1 6.709 7.498.75.75 0 0 1-.372.568A12.696 12.696 0 0 1 12 21.75c-2.305 0-4.47-.612-6.337-1.684a.75.75 0 0 1-.372-.568 6.787 6.787 0 0 1 1.019-4.38Z"
|
|
|
|
|
clip-rule="evenodd"
|
|
|
|
|
/>
|
|
|
|
|
<path d="M5.082 14.254a8.287 8.287 0 0 0-1.308 5.135 9.687 9.687 0 0 1-1.764-.44l-.115-.04a.563.563 0 0 1-.373-.487l-.01-.121a3.75 3.75 0 0 1 3.57-4.047ZM20.226 19.389a8.287 8.287 0 0 0-1.308-5.135 3.75 3.75 0 0 1 3.57 4.047l-.01.121a.563.563 0 0 1-.373.486l-.115.04c-.567.2-1.156.349-1.764.441Z" />
|
|
|
|
|
</svg>
|
2026-04-06 16:48:46 +02:00
|
|
|
<span class="text-gray-700">{gettext("Join")}</span>
|
2026-04-10 18:41:03 +02:00
|
|
|
<span
|
|
|
|
|
id="attendees-count"
|
|
|
|
|
phx-update="ignore"
|
|
|
|
|
phx-hook="UpdateAttendees"
|
2026-04-14 17:41:22 +02:00
|
|
|
data-label-id="attendees-label"
|
|
|
|
|
data-singular={gettext("attendee")}
|
|
|
|
|
data-plural={gettext("attendees")}
|
2026-04-10 18:41:03 +02:00
|
|
|
class="text-gray-700"
|
|
|
|
|
>
|
2026-02-09 19:20:08 +01:00
|
|
|
{@attendees_nb}
|
|
|
|
|
</span>
|
2026-04-14 17:41:22 +02:00
|
|
|
<span id="attendees-label" class="text-gray-700">
|
|
|
|
|
{if @attendees_nb > 1, do: gettext("attendees"), else: gettext("attendee")}
|
|
|
|
|
</span>
|
2026-02-09 19:20:08 +01:00
|
|
|
<!-- Arrow icon -->
|
|
|
|
|
<svg
|
|
|
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
|
|
|
viewBox="0 0 24 24"
|
|
|
|
|
fill="currentColor"
|
|
|
|
|
class="w-5 h-5 text-gray-700"
|
|
|
|
|
>
|
|
|
|
|
<path
|
|
|
|
|
fill-rule="evenodd"
|
|
|
|
|
d="M8.25 3.75H19.5a.75.75 0 0 1 .75.75v11.25a.75.75 0 0 1-1.5 0V6.31L5.03 20.03a.75.75 0 0 1-1.06-1.06L17.69 5.25H8.25a.75.75 0 0 1 0-1.5Z"
|
|
|
|
|
clip-rule="evenodd"
|
|
|
|
|
/>
|
|
|
|
|
</svg>
|
|
|
|
|
</a>
|
|
|
|
|
<!-- Mobile settings button -->
|
2026-04-10 18:41:03 +02:00
|
|
|
<button
|
|
|
|
|
phx-click="toggle-settings-modal"
|
|
|
|
|
class="lg:hidden p-2 rounded-full hover:bg-gray-100"
|
2024-07-11 12:53:47 +02:00
|
|
|
>
|
2026-02-09 19:20:08 +01:00
|
|
|
<svg
|
|
|
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
|
|
|
viewBox="0 0 24 24"
|
|
|
|
|
fill="currentColor"
|
|
|
|
|
class="w-5 h-5 text-gray-600"
|
2024-07-11 12:53:47 +02:00
|
|
|
>
|
2026-02-09 19:20:08 +01:00
|
|
|
<path
|
|
|
|
|
fill-rule="evenodd"
|
|
|
|
|
d="M11.828 2.25c-.916 0-1.699.663-1.85 1.567l-.091.549a.798.798 0 0 1-.517.608 7.45 7.45 0 0 0-.478.198.798.798 0 0 1-.796-.064l-.453-.324a1.875 1.875 0 0 0-2.416.2l-.243.243a1.875 1.875 0 0 0-.2 2.416l.324.453a.798.798 0 0 1 .064.796 7.448 7.448 0 0 0-.198.478.798.798 0 0 1-.608.517l-.55.092a1.875 1.875 0 0 0-1.566 1.849v.344c0 .916.663 1.699 1.567 1.85l.549.091c.281.047.508.25.608.517.06.162.127.321.198.478a.798.798 0 0 1-.064.796l-.324.453a1.875 1.875 0 0 0 .2 2.416l.243.243c.648.648 1.67.733 2.416.2l.453-.324a.798.798 0 0 1 .796-.064c.157.071.316.137.478.198.267.1.47.327.517.608l.092.55c.15.903.932 1.566 1.849 1.566h.344c.916 0 1.699-.663 1.85-1.567l.091-.549a.798.798 0 0 1 .517-.608 7.52 7.52 0 0 0 .478-.198.798.798 0 0 1 .796.064l.453.324a1.875 1.875 0 0 0 2.416-.2l.243-.243c.648-.648.733-1.67.2-2.416l-.324-.453a.798.798 0 0 1-.064-.796c.071-.157.137-.316.198-.478.1-.267.327-.47.608-.517l.55-.091a1.875 1.875 0 0 0 1.566-1.85v-.344c0-.916-.663-1.699-1.567-1.85l-.549-.091a.798.798 0 0 1-.608-.517 7.507 7.507 0 0 0-.198-.478.798.798 0 0 1 .064-.796l.324-.453a1.875 1.875 0 0 0-.2-2.416l-.243-.243a1.875 1.875 0 0 0-2.416-.2l-.453.324a.798.798 0 0 1-.796.064 7.462 7.462 0 0 0-.478-.198.798.798 0 0 1-.517-.608l-.091-.55a1.875 1.875 0 0 0-1.85-1.566h-.344ZM12 15.75a3.75 3.75 0 1 0 0-7.5 3.75 3.75 0 0 0 0 7.5Z"
|
|
|
|
|
clip-rule="evenodd"
|
|
|
|
|
/>
|
|
|
|
|
</svg>
|
|
|
|
|
</button>
|
|
|
|
|
</div>
|
|
|
|
|
</header>
|
2026-08-04 14:02:46 +07:00
|
|
|
|
2026-04-10 18:41:03 +02:00
|
|
|
<!-- Main Content Area - Three Column Layout -->
|
|
|
|
|
<div id="wrapper" class="flex-1 flex overflow-hidden">
|
2026-02-09 19:20:08 +01:00
|
|
|
<!-- Left Sidebar - Slide Thumbnails -->
|
|
|
|
|
<aside
|
2026-04-15 08:04:27 +02:00
|
|
|
:if={@event.presentation_file.length > 0 and not @missing_slide_thumbnails}
|
2026-02-12 14:38:57 +01:00
|
|
|
class="hidden lg:flex w-56 flex-shrink-0 bg-white overflow-hidden"
|
2024-04-06 11:48:47 +02:00
|
|
|
>
|
2026-02-09 19:20:08 +01:00
|
|
|
<.live_component
|
|
|
|
|
id="slide-sidebar"
|
|
|
|
|
module={ClaperWeb.EventLive.ManageSlideSidebarComponent}
|
|
|
|
|
presentation_file={@event.presentation_file}
|
|
|
|
|
current_position={@state.position}
|
2026-04-15 08:04:27 +02:00
|
|
|
thumbnail_cache_bust={@thumbnail_cache_bust}
|
2026-02-09 19:20:08 +01:00
|
|
|
/>
|
|
|
|
|
</aside>
|
2026-08-04 14:02:46 +07:00
|
|
|
|
2026-04-10 18:41:03 +02:00
|
|
|
<!-- Center Content -->
|
2026-02-12 14:38:57 +01:00
|
|
|
<main class="flex-1 flex flex-col min-w-0 overflow-hidden bg-white">
|
2026-02-09 19:20:08 +01:00
|
|
|
<!-- Slide Preview (only if presentation has slides) -->
|
2026-04-10 18:41:03 +02:00
|
|
|
<div :if={@event.presentation_file.length > 0} class="flex-shrink-0 h-2/5">
|
2026-02-09 19:20:08 +01:00
|
|
|
<.live_component
|
|
|
|
|
id="slide-preview"
|
|
|
|
|
module={ClaperWeb.EventLive.ManageSlidePreviewComponent}
|
|
|
|
|
presentation_file={@event.presentation_file}
|
|
|
|
|
current_position={@state.position}
|
|
|
|
|
total_slides={@event.presentation_file.length}
|
2026-04-15 08:04:27 +02:00
|
|
|
missing_slide_thumbnails={@missing_slide_thumbnails}
|
|
|
|
|
thumbnail_regeneration_in_progress={@thumbnail_regeneration_in_progress}
|
2026-02-09 19:20:08 +01:00
|
|
|
/>
|
2024-07-11 12:53:47 +02:00
|
|
|
</div>
|
2026-08-04 14:02:46 +07:00
|
|
|
|
2026-04-10 18:41:03 +02:00
|
|
|
<!-- Bottom Section - Interactions & Options -->
|
2026-03-13 18:37:13 +01:00
|
|
|
<div class="flex-1 flex flex-col lg:flex-row overflow-y-auto lg:overflow-hidden">
|
2026-02-09 19:20:08 +01:00
|
|
|
<!-- Interactions Panel -->
|
2026-08-20 19:04:58 +07:00
|
|
|
<div
|
|
|
|
|
id="interactions-pane"
|
|
|
|
|
class="lg:w-1/3 flex-shrink-0 p-4 lg:min-h-0 lg:flex lg:flex-col lg:overflow-hidden"
|
|
|
|
|
>
|
2026-02-09 19:20:08 +01:00
|
|
|
<.live_component
|
|
|
|
|
id="interaction-list"
|
|
|
|
|
module={ClaperWeb.EventLive.ManageInteractionListComponent}
|
|
|
|
|
interactions={@interactions}
|
|
|
|
|
event_code={@event.code}
|
2026-04-28 17:50:19 +02:00
|
|
|
transcription_config={@transcription_config}
|
|
|
|
|
transcription_globally_enabled={@transcription_globally_enabled}
|
2026-02-09 19:20:08 +01:00
|
|
|
/>
|
2024-04-06 11:48:47 +02:00
|
|
|
</div>
|
2026-08-04 14:02:46 +07:00
|
|
|
|
2026-04-10 18:41:03 +02:00
|
|
|
<!-- Audience Responses Panel -->
|
|
|
|
|
<div class="min-h-[400px] lg:min-h-0 flex-1 flex flex-col overflow-hidden p-4">
|
2026-02-13 18:42:09 +01:00
|
|
|
<ClaperWeb.EventLive.ManageAudienceResponsesComponent.render
|
|
|
|
|
list_tab={@list_tab}
|
|
|
|
|
post_count={@post_count}
|
|
|
|
|
question_count={@question_count}
|
|
|
|
|
pinned_post_count={@pinned_post_count}
|
|
|
|
|
form_submit_count={@form_submit_count}
|
|
|
|
|
streams={@streams}
|
|
|
|
|
event={@event}
|
|
|
|
|
/>
|
2024-07-11 12:53:47 +02:00
|
|
|
</div>
|
2022-07-23 01:44:03 +02:00
|
|
|
</div>
|
2026-02-09 19:20:08 +01:00
|
|
|
</main>
|
2026-08-04 14:02:46 +07:00
|
|
|
|
2026-04-10 18:41:03 +02:00
|
|
|
<!-- Right Sidebar - Settings -->
|
|
|
|
|
<aside class="hidden xl:flex w-80 flex-shrink-0 flex-col overflow-hidden bg-white">
|
2026-02-09 19:20:08 +01:00
|
|
|
<div class="flex-1 overflow-y-auto">
|
|
|
|
|
<.live_component
|
|
|
|
|
id="settings-pane"
|
|
|
|
|
module={ClaperWeb.EventLive.ManagerSettingsComponent}
|
|
|
|
|
create={@create}
|
|
|
|
|
state={@state}
|
|
|
|
|
current_interaction={@current_interaction}
|
|
|
|
|
/>
|
2022-07-23 01:44:03 +02:00
|
|
|
</div>
|
2026-02-09 19:20:08 +01:00
|
|
|
</aside>
|
2022-07-23 01:44:03 +02:00
|
|
|
</div>
|
2026-02-20 10:02:31 +00:00
|
|
|
<div
|
|
|
|
|
id="transcription-capture"
|
|
|
|
|
phx-hook="TranscriptionCapture"
|
|
|
|
|
class="hidden"
|
|
|
|
|
data-event-uuid={@event.uuid}
|
|
|
|
|
data-audio-token={@audio_token}
|
|
|
|
|
/>
|
2023-01-30 14:32:28 +01:00
|
|
|
</div>
|