mirror of
https://github.com/ClaperCo/Claper.git
synced 2025-12-16 11:57:58 +01:00
deps: upgrade to live view 1.0
This commit is contained in:
@@ -1,3 +1,11 @@
|
||||
### v.2.4.0
|
||||
|
||||
### Fixes and improvements
|
||||
|
||||
- Upgrade JS dependencies
|
||||
- Upgrade Elixir dependencies, including Phoenix Live View to 1.0.17
|
||||
- Refactor view templates to use {} instead of <%= %>
|
||||
|
||||
### v.2.3.2
|
||||
|
||||
### Fixes and improvements
|
||||
|
||||
@@ -99,7 +99,7 @@ defmodule ClaperWeb do
|
||||
use PhoenixHTMLHelpers
|
||||
|
||||
# Import LiveView and .heex helpers (live_render, live_patch, <.form>, etc)
|
||||
import Phoenix.LiveView.Helpers
|
||||
import Phoenix.Component
|
||||
import ClaperWeb.LiveHelpers
|
||||
alias Phoenix.LiveView.JS
|
||||
|
||||
|
||||
@@ -103,7 +103,7 @@ defmodule ClaperWeb.UserOidcAuth do
|
||||
Application.get_env(:claper, ClaperWeb.Endpoint)[:base_url]
|
||||
end
|
||||
|
||||
defp opts(pkce_verifier \\ nil) do
|
||||
defp opts(pkce_verifier) do
|
||||
url = base_url()
|
||||
|
||||
base_opts = %{
|
||||
|
||||
@@ -46,16 +46,16 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p class="text-gray-700 text-xl font-semibold mt-5"><%= gettext("Options") %></p>
|
||||
<p class="text-gray-700 text-xl font-semibold mt-5">{gettext("Options")}</p>
|
||||
|
||||
<div class="flex gap-x-2 mb-5 mt-3">
|
||||
<%= checkbox(f, :attendee_visibility, class: "h-4 w-5") %>
|
||||
<%= label(
|
||||
{checkbox(f, :attendee_visibility, class: "h-4 w-5")}
|
||||
{label(
|
||||
f,
|
||||
:attendee_visibility,
|
||||
gettext("Attendees can view the web content on their device"),
|
||||
class: "text-sm font-medium"
|
||||
) %>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -65,13 +65,13 @@
|
||||
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
|
||||
{case @live_action do
|
||||
:new -> gettext("Create")
|
||||
:edit -> gettext("Save")
|
||||
end %>
|
||||
end}
|
||||
</button>
|
||||
<%= if @live_action == :edit do %>
|
||||
<%= link(gettext("Delete"),
|
||||
{link(gettext("Delete"),
|
||||
to: "#",
|
||||
phx_click: "delete",
|
||||
phx_target: @myself,
|
||||
@@ -81,7 +81,7 @@
|
||||
],
|
||||
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>
|
||||
|
||||
@@ -29,7 +29,7 @@ defmodule ClaperWeb.EventLive.EmbedComponent do
|
||||
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>
|
||||
<span class="font-bold"><%= gettext("See current web content") %></span>
|
||||
<span class="font-bold">{gettext("See current web content")}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -52,8 +52,8 @@ defmodule ClaperWeb.EventLive.EmbedComponent do
|
||||
</svg>
|
||||
</div>
|
||||
|
||||
<p class="text-xs text-gray-500 my-1"><%= gettext("Current web content") %></p>
|
||||
<p class="text-white text-lg font-semibold mb-4"><%= @embed.title %></p>
|
||||
<p class="text-xs text-gray-500 my-1">{gettext("Current web content")}</p>
|
||||
<p class="text-white text-lg font-semibold mb-4">{@embed.title}</p>
|
||||
</div>
|
||||
<div class="flex flex-col space-y-3">
|
||||
<.live_component
|
||||
|
||||
@@ -39,7 +39,7 @@ defmodule ClaperWeb.EventLive.EmbedIframeComponent do
|
||||
>
|
||||
</iframe>
|
||||
<% "custom" -> %>
|
||||
<%= raw(@content) %>
|
||||
{raw(@content)}
|
||||
<% end %>
|
||||
</div>
|
||||
"""
|
||||
|
||||
@@ -20,7 +20,7 @@ defmodule ClaperWeb.EventLive.EventCardComponent do
|
||||
class="text-lg font-medium text-primary-600 truncate"
|
||||
href={~p"/e/#{@event.code}/manage"}
|
||||
>
|
||||
<%= @event.name %>
|
||||
{@event.name}
|
||||
</a>
|
||||
<p
|
||||
:if={@event.lti_resource}
|
||||
@@ -47,17 +47,17 @@ defmodule ClaperWeb.EventLive.EventCardComponent do
|
||||
<div class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-red-500 text-white items-center gap-x-1">
|
||||
<span class="h-2 w-2 bg-white rounded-full animate__animated animate__flash animate__infinite animate__slow_slow">
|
||||
</span>
|
||||
<%= gettext("Live") %>
|
||||
{gettext("Live")}
|
||||
</div>
|
||||
<% end %>
|
||||
<%= if !Event.started?(@event) && !Event.finished?(@event) do %>
|
||||
<p class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-green-100 text-green-800">
|
||||
<%= gettext("Incoming") %>
|
||||
{gettext("Incoming")}
|
||||
</p>
|
||||
<% end %>
|
||||
<%= if Event.finished?(@event) do %>
|
||||
<p class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-gray-100 text-gray-800">
|
||||
<%= gettext("Finished") %>
|
||||
{gettext("Finished")}
|
||||
</p>
|
||||
<% end %>
|
||||
</div>
|
||||
@@ -66,7 +66,7 @@ defmodule ClaperWeb.EventLive.EventCardComponent do
|
||||
<div class="text-sm font-medium uppercase text-gray-700 flex justify-center space-x-1 items-center">
|
||||
<img src="/images/icons/hashtag.svg" class="h-5 w-5" />
|
||||
<p>
|
||||
<%= @event.code %>
|
||||
{@event.code}
|
||||
</p>
|
||||
</div>
|
||||
<div
|
||||
@@ -83,11 +83,11 @@ defmodule ClaperWeb.EventLive.EventCardComponent do
|
||||
class="h-5 w-5"
|
||||
/>
|
||||
<p :if={!Event.finished?(@event) && !Event.started?(@event)}>
|
||||
<%= gettext("Starting on") %>
|
||||
{gettext("Starting on")}
|
||||
<span x-text={"moment.utc('#{@event.started_at}').local().format('lll')"}></span>
|
||||
</p>
|
||||
<p :if={Event.finished?(@event)}>
|
||||
<%= gettext("Finished on") %>
|
||||
{gettext("Finished on")}
|
||||
<span x-text={"moment.utc('#{@event.expired_at}').local().format('lll')"}></span>
|
||||
</p>
|
||||
</div>
|
||||
@@ -108,7 +108,7 @@ defmodule ClaperWeb.EventLive.EventCardComponent do
|
||||
phx-target={@myself}
|
||||
class="flex w-full lg:w-auto pl-3 pr-4 text-white items-center justify-between py-2 rounded-md tracking-wide font-bold focus:outline-none focus:shadow-outline hover:bg-primary-600 bg-primary-500"
|
||||
>
|
||||
<span class="mr-2"><%= gettext("Join") %></span>
|
||||
<span class="mr-2">{gettext("Join")}</span>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
@@ -149,7 +149,7 @@ defmodule ClaperWeb.EventLive.EventCardComponent do
|
||||
clip-rule="evenodd"
|
||||
/>
|
||||
</svg>
|
||||
<span><%= gettext("Event manager") %></span>
|
||||
<span>{gettext("Event manager")}</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
@@ -172,7 +172,7 @@ defmodule ClaperWeb.EventLive.EventCardComponent do
|
||||
/>
|
||||
<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>
|
||||
<span><%= gettext("Attendees room") %></span>
|
||||
<span>{gettext("Attendees room")}</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -198,7 +198,7 @@ defmodule ClaperWeb.EventLive.EventCardComponent do
|
||||
>
|
||||
<path stroke-linecap="round" stroke-linejoin="round" d="M6 18 18 6M6 6l12 12" />
|
||||
</svg>
|
||||
<span><%= gettext("End") %></span>
|
||||
<span>{gettext("End")}</span>
|
||||
</.link>
|
||||
</div>
|
||||
<div class="flex items-start gap-x-2 relative text-sm ">
|
||||
@@ -209,7 +209,7 @@ defmodule ClaperWeb.EventLive.EventCardComponent do
|
||||
phx-target={@myself}
|
||||
class="flex w-full lg:w-auto pl-3 pr-4 text-gray-700 items-center justify-between py-2 rounded-md tracking-wide font-bold focus:outline-none focus:shadow-outline hover:bg-gray-300 bg-gray-200"
|
||||
>
|
||||
<span class="mr-2"><%= gettext("More options") %></span>
|
||||
<span class="mr-2">{gettext("More options")}</span>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
@@ -247,7 +247,7 @@ defmodule ClaperWeb.EventLive.EventCardComponent do
|
||||
<path d="m5.433 13.917 1.262-3.155A4 4 0 0 1 7.58 9.42l6.92-6.918a2.121 2.121 0 0 1 3 3l-6.92 6.918c-.383.383-.84.685-1.343.886l-3.154 1.262a.5.5 0 0 1-.65-.65Z" />
|
||||
<path d="M3.5 5.75c0-.69.56-1.25 1.25-1.25H10A.75.75 0 0 0 10 3H4.75A2.75 2.75 0 0 0 2 5.75v9.5A2.75 2.75 0 0 0 4.75 18h9.5A2.75 2.75 0 0 0 17 15.25V10a.75.75 0 0 0-1.5 0v5.25c0 .69-.56 1.25-1.25 1.25h-9.5c-.69 0-1.25-.56-1.25-1.25v-9.5Z" />
|
||||
</svg>
|
||||
<span><%= gettext("Edit") %></span>
|
||||
<span>{gettext("Edit")}</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
@@ -265,7 +265,7 @@ defmodule ClaperWeb.EventLive.EventCardComponent do
|
||||
<path d="M7 3.5A1.5 1.5 0 0 1 8.5 2h3.879a1.5 1.5 0 0 1 1.06.44l3.122 3.12A1.5 1.5 0 0 1 17 6.622V12.5a1.5 1.5 0 0 1-1.5 1.5h-1v-3.379a3 3 0 0 0-.879-2.121L10.5 5.379A3 3 0 0 0 8.379 4.5H7v-1Z" />
|
||||
<path d="M4.5 6A1.5 1.5 0 0 0 3 7.5v9A1.5 1.5 0 0 0 4.5 18h7a1.5 1.5 0 0 0 1.5-1.5v-5.879a1.5 1.5 0 0 0-.44-1.06L9.44 6.439A1.5 1.5 0 0 0 8.378 6H4.5Z" />
|
||||
</svg>
|
||||
<span><%= gettext("Duplicate") %></span>
|
||||
<span>{gettext("Duplicate")}</span>
|
||||
</button>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -279,7 +279,7 @@ defmodule ClaperWeb.EventLive.EventCardComponent do
|
||||
class="mt-2 flex flex-col space-y-2 sm:space-y-0 justify-between sm:flex-row items-center"
|
||||
>
|
||||
<span class="text-sm text-supporting-red-500">
|
||||
<%= gettext("Error when processing the file") %>
|
||||
{gettext("Error when processing the file")}
|
||||
</span>
|
||||
<div class="relative text-sm">
|
||||
<%= if not @is_leader do %>
|
||||
@@ -289,7 +289,7 @@ defmodule ClaperWeb.EventLive.EventCardComponent do
|
||||
phx-target={@myself}
|
||||
class="flex w-full lg:w-auto pl-3 pr-4 text-gray-700 items-center justify-between py-2 rounded-md tracking-wide font-bold focus:outline-none focus:shadow-outline hover:bg-gray-300 bg-gray-200"
|
||||
>
|
||||
<span class="mr-2"><%= gettext("More options") %></span>
|
||||
<span class="mr-2">{gettext("More options")}</span>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
@@ -327,7 +327,7 @@ defmodule ClaperWeb.EventLive.EventCardComponent do
|
||||
<path d="m5.433 13.917 1.262-3.155A4 4 0 0 1 7.58 9.42l6.92-6.918a2.121 2.121 0 0 1 3 3l-6.92 6.918c-.383.383-.84.685-1.343.886l-3.154 1.262a.5.5 0 0 1-.65-.65Z" />
|
||||
<path d="M3.5 5.75c0-.69.56-1.25 1.25-1.25H10A.75.75 0 0 0 10 3H4.75A2.75 2.75 0 0 0 2 5.75v9.5A2.75 2.75 0 0 0 4.75 18h9.5A2.75 2.75 0 0 0 17 15.25V10a.75.75 0 0 0-1.5 0v5.25c0 .69-.56 1.25-1.25 1.25h-9.5c-.69 0-1.25-.56-1.25-1.25v-9.5Z" />
|
||||
</svg>
|
||||
<span><%= gettext("Edit") %></span>
|
||||
<span>{gettext("Edit")}</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -341,7 +341,7 @@ defmodule ClaperWeb.EventLive.EventCardComponent do
|
||||
class="flex space-x-1 items-center"
|
||||
>
|
||||
<img src="/images/loading.gif" class="h-8" />
|
||||
<span class="text-sm text-gray-500"><%= gettext("Processing your file...") %></span>
|
||||
<span class="text-sm text-gray-500">{gettext("Processing your file...")}</span>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
@@ -367,7 +367,7 @@ defmodule ClaperWeb.EventLive.EventCardComponent do
|
||||
<path d="M2 10a8 8 0 018-8v8h8a8 8 0 11-16 0z" />
|
||||
<path d="M12 2.252A8.014 8.014 0 0117.748 8H12V2.252z" />
|
||||
</svg>
|
||||
<span><%= gettext("View report") %></span>
|
||||
<span>{gettext("View report")}</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="relative text-sm">
|
||||
@@ -378,7 +378,7 @@ defmodule ClaperWeb.EventLive.EventCardComponent do
|
||||
phx-target={@myself}
|
||||
class="flex w-full lg:w-auto pl-3 pr-4 text-gray-700 items-center justify-between py-2 rounded-md tracking-wide font-bold focus:outline-none focus:shadow-outline hover:bg-gray-300 bg-gray-200"
|
||||
>
|
||||
<span class="mr-2"><%= gettext("More options") %></span>
|
||||
<span class="mr-2">{gettext("More options")}</span>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
@@ -415,7 +415,7 @@ defmodule ClaperWeb.EventLive.EventCardComponent do
|
||||
<path d="M7 3.5A1.5 1.5 0 0 1 8.5 2h3.879a1.5 1.5 0 0 1 1.06.44l3.122 3.12A1.5 1.5 0 0 1 17 6.622V12.5a1.5 1.5 0 0 1-1.5 1.5h-1v-3.379a3 3 0 0 0-.879-2.121L10.5 5.379A3 3 0 0 0 8.379 4.5H7v-1Z" />
|
||||
<path d="M4.5 6A1.5 1.5 0 0 0 3 7.5v9A1.5 1.5 0 0 0 4.5 18h7a1.5 1.5 0 0 0 1.5-1.5v-5.879a1.5 1.5 0 0 0-.44-1.06L9.44 6.439A1.5 1.5 0 0 0 8.378 6H4.5Z" />
|
||||
</svg>
|
||||
<span><%= gettext("Duplicate") %></span>
|
||||
<span>{gettext("Duplicate")}</span>
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
@@ -441,7 +441,7 @@ defmodule ClaperWeb.EventLive.EventCardComponent do
|
||||
clip-rule="evenodd"
|
||||
/>
|
||||
</svg>
|
||||
<span><%= gettext("Delete") %></span>
|
||||
<span>{gettext("Delete")}</span>
|
||||
</.link>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
@@ -33,13 +33,13 @@
|
||||
/>
|
||||
</svg>
|
||||
|
||||
<span><%= gettext("How it works ?") %></span>
|
||||
<span>{gettext("How it works ?")}</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="border-b border-gray-200 py-4 flex flex-col sm:flex-row sm:items-center justify-between">
|
||||
<div class="flex-1 min-w-0">
|
||||
<h1 class="text-2xl font-medium leading-6 text-gray-900 sm:truncate">
|
||||
<%= @page_title %>
|
||||
{@page_title}
|
||||
</h1>
|
||||
</div>
|
||||
<div class="flex mt-4 space-x-5 sm:mt-0">
|
||||
@@ -50,28 +50,28 @@
|
||||
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 @action do
|
||||
{case @action do
|
||||
:edit -> gettext("Save")
|
||||
:new -> gettext("Create")
|
||||
end %>
|
||||
end}
|
||||
</button>
|
||||
<% else %>
|
||||
<div class="opacity-25 cursor-default 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">
|
||||
<%= case @action do
|
||||
{case @action do
|
||||
:edit -> gettext("Save")
|
||||
:new -> gettext("Create")
|
||||
end %>
|
||||
end}
|
||||
</div>
|
||||
<% end %>
|
||||
<%= if @action == :edit && !@event.expired_at do %>
|
||||
<%= link(gettext("Delete"),
|
||||
{link(gettext("Delete"),
|
||||
to: "#",
|
||||
phx_click: "delete",
|
||||
phx_value_id: @event.uuid,
|
||||
data: [confirm: gettext("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>
|
||||
</div>
|
||||
@@ -85,7 +85,7 @@
|
||||
data-tg-title={"📄 #{gettext("Presentation file (optional)")}"}
|
||||
>
|
||||
<label class="block text-sm font-medium text-gray-700 mb-2">
|
||||
<%= gettext("Select your presentation (optional)") %>
|
||||
{gettext("Select your presentation (optional)")}
|
||||
</label>
|
||||
<div class="max-w-lg flex flex-col justify-center items-center px-6 pt-5 pb-6 border-2 bg-white shadow-base border-gray-300 border-dashed rounded-md">
|
||||
<%= if @uploads.presentation_file.entries |> Enum.at(0, %{}) |> Map.get(:progress, 0) < 100 do %>
|
||||
@@ -112,22 +112,22 @@
|
||||
phx-submit="save-file"
|
||||
phx-target={@myself}
|
||||
>
|
||||
<span><%= gettext("Upload a file") %></span>
|
||||
<span>{gettext("Upload a file")}</span>
|
||||
<.live_file_input upload={@uploads.presentation_file} class="sr-only" />
|
||||
</form>
|
||||
</label>
|
||||
<p class="pl-1"><%= gettext("or drag and drop") %></p>
|
||||
<p class="pl-1">{gettext("or drag and drop")}</p>
|
||||
</div>
|
||||
<p class="text-xs text-gray-500">
|
||||
<%= gettext("PDF, PPT, PPTX up to %{size} MB", size: @max_file_size) %>
|
||||
{gettext("PDF, PPT, PPTX up to %{size} MB", size: @max_file_size)}
|
||||
</p>
|
||||
<%= for entry <- @uploads.presentation_file.entries do %>
|
||||
<progress id="file" max="100" value={entry.progress}>
|
||||
<%= entry.progress %>
|
||||
{entry.progress}
|
||||
</progress>
|
||||
<%= for err <- upload_errors(@uploads.presentation_file, entry) do %>
|
||||
<p class="text-red-500 text-sm px-4 py-2 border border-red-600 rounded-md my-3">
|
||||
<%= error_to_string(err) %>
|
||||
{error_to_string(err)}
|
||||
</p>
|
||||
<% end %>
|
||||
<% end %>
|
||||
@@ -149,9 +149,9 @@
|
||||
d="M5 13l4 4L19 7"
|
||||
/>
|
||||
</svg>
|
||||
<p class="text-gray-700"><%= gettext("Presentation uploaded") %></p>
|
||||
<p class="text-gray-700">{gettext("Presentation uploaded")}</p>
|
||||
</div>
|
||||
<p class="text-xs text-gray-400"><%= entry.client_name %></p>
|
||||
<p class="text-xs text-gray-400">{entry.client_name}</p>
|
||||
<p>
|
||||
<a
|
||||
href="#"
|
||||
@@ -160,7 +160,7 @@
|
||||
phx-target={@myself}
|
||||
class="text-red-500 text-sm"
|
||||
>
|
||||
<%= gettext("Remove") %>
|
||||
{gettext("Remove")}
|
||||
</a>
|
||||
</p>
|
||||
<% end %>
|
||||
@@ -170,7 +170,7 @@
|
||||
<% else %>
|
||||
<div class="mt-12 mb-3">
|
||||
<label class="block text-sm font-medium text-gray-700 mb-2">
|
||||
<%= gettext("Select your presentation") %>
|
||||
{gettext("Select your presentation")}
|
||||
</label>
|
||||
<div class="max-w-lg flex flex-col justify-center items-center px-6 pt-5 pb-6 border-2 bg-white shadow-base border-gray-300 border-dashed rounded-md">
|
||||
<%= if @uploads.presentation_file.entries |> Enum.at(0, %{}) |> Map.get(:progress, 0) < 100 do %>
|
||||
@@ -189,7 +189,7 @@
|
||||
d="M5 13l4 4L19 7"
|
||||
/>
|
||||
</svg>
|
||||
<p class="text-gray-700"><%= gettext("Presentation attached") %></p>
|
||||
<p class="text-gray-700">{gettext("Presentation attached")}</p>
|
||||
</div>
|
||||
<div class="flex flex-col space-y-3 items-center">
|
||||
<label class="text-primary-500 text-sm">
|
||||
@@ -199,24 +199,24 @@
|
||||
phx-submit="save-file"
|
||||
phx-target={@myself}
|
||||
>
|
||||
<span><%= gettext("Change file") %></span>
|
||||
<span>{gettext("Change file")}</span>
|
||||
<.live_file_input upload={@uploads.presentation_file} class="sr-only" />
|
||||
</form>
|
||||
</label>
|
||||
<%= for entry <- @uploads.presentation_file.entries do %>
|
||||
<progress id="file" max="100" value={entry.progress}>
|
||||
<%= entry.progress %>
|
||||
{entry.progress}
|
||||
</progress>
|
||||
<%= for err <- upload_errors(@uploads.presentation_file, entry) do %>
|
||||
<p class="text-red-500 text-sm px-4 py-2 border border-red-600 rounded-md my-3">
|
||||
<%= error_to_string(err) %>
|
||||
{error_to_string(err)}
|
||||
</p>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<p class="text-supporting-red-500 text-sm italic text-center hidden">
|
||||
<%= gettext(
|
||||
{gettext(
|
||||
"Changing your file will remove all interaction elements like polls associated."
|
||||
) %>
|
||||
)}
|
||||
</p>
|
||||
</div>
|
||||
<% else %>
|
||||
@@ -235,19 +235,19 @@
|
||||
d="M5 13l4 4L19 7"
|
||||
/>
|
||||
</svg>
|
||||
<p class="text-gray-700"><%= gettext("Presentation replaced") %></p>
|
||||
<p class="text-gray-700">{gettext("Presentation replaced")}</p>
|
||||
</div>
|
||||
|
||||
<%= for entry <- @uploads.presentation_file.entries do %>
|
||||
<p class="text-xs text-gray-400"><%= entry.client_name %></p>
|
||||
<p class="text-xs text-gray-400">{entry.client_name}</p>
|
||||
<div :if={entry.progress < 100}>
|
||||
<progress id="file" max="100" value={entry.progress}>
|
||||
<%= entry.progress %>
|
||||
{entry.progress}
|
||||
</progress>
|
||||
</div>
|
||||
<%= for err <- upload_errors(@uploads.presentation_file, entry) do %>
|
||||
<p class="text-red-500 text-sm px-4 py-2 border border-red-600 rounded-md my-3">
|
||||
<%= error_to_string(err) %>
|
||||
{error_to_string(err)}
|
||||
</p>
|
||||
<% end %>
|
||||
<p>
|
||||
@@ -258,7 +258,7 @@
|
||||
phx-target={@myself}
|
||||
class="text-red-500 text-sm"
|
||||
>
|
||||
<%= gettext("Remove") %>
|
||||
{gettext("Remove")}
|
||||
</a>
|
||||
</p>
|
||||
<% end %>
|
||||
@@ -267,7 +267,7 @@
|
||||
<%= for entry <- @uploads.presentation_file.entries do %>
|
||||
<%= for err <- upload_errors(@uploads.presentation_file, entry) do %>
|
||||
<p class="text-red-500 text-sm px-4 py-2 border border-red-600 rounded-md my-3">
|
||||
<%= error_to_string(err) %>
|
||||
{error_to_string(err)}
|
||||
</p>
|
||||
<% end %>
|
||||
<% end %>
|
||||
@@ -339,7 +339,7 @@
|
||||
data-tg-order="4"
|
||||
>
|
||||
<span class="text-lg block font-medium text-gray-700">
|
||||
<%= gettext("Facilitators can present and manage interactions") %>
|
||||
{gettext("Facilitators can present and manage interactions")}
|
||||
</span>
|
||||
<button
|
||||
type="button"
|
||||
@@ -360,7 +360,7 @@
|
||||
clip-rule="evenodd"
|
||||
/>
|
||||
</svg>
|
||||
<span><%= gettext("Add facilitator") %></span>
|
||||
<span>{gettext("Add facilitator")}</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
@@ -381,15 +381,15 @@
|
||||
key={:email}
|
||||
name=""
|
||||
/>
|
||||
<%= hidden_input(l, :user_email, value: @current_user.email) %>
|
||||
{hidden_input(l, :user_email, value: @current_user.email)}
|
||||
</div>
|
||||
|
||||
<label
|
||||
phx-click={JS.hide(to: "##{l.data.temp_id || l.id}")}
|
||||
class="cursor-pointer md:ml-3 rounded-md bg-supporting-red-500 hover:bg-supporting-red-600 transition flex items-center mt-2 md:w-max text-white py-7 px-3 text-sm max-h-0"
|
||||
>
|
||||
<span><%= gettext("Remove") %></span>
|
||||
<%= checkbox(l, :delete, class: "hidden") %>
|
||||
<span>{gettext("Remove")}</span>
|
||||
{checkbox(l, :delete, class: "hidden")}
|
||||
</label>
|
||||
<% else %>
|
||||
<div class="relative">
|
||||
@@ -401,9 +401,9 @@
|
||||
/>
|
||||
</div>
|
||||
|
||||
<%= hidden_input(l, :temp_id) %>
|
||||
<%= hidden_input(l, :event_id, value: @event.id) %>
|
||||
<%= hidden_input(l, :user_email, value: @current_user.email) %>
|
||||
{hidden_input(l, :temp_id)}
|
||||
{hidden_input(l, :event_id, value: @event.id)}
|
||||
{hidden_input(l, :user_email, value: @current_user.email)}
|
||||
|
||||
<button
|
||||
type="button"
|
||||
@@ -412,7 +412,7 @@
|
||||
phx-target={@myself}
|
||||
class="md:ml-3 rounded-md bg-supporting-red-500 hover:bg-supporting-red-600 transition flex items-center mt-2 md:w-max text-white py-5 px-3 text-sm max-h-0"
|
||||
>
|
||||
<span><%= gettext("Remove") %></span>
|
||||
<span>{gettext("Remove")}</span>
|
||||
</button>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
@@ -29,7 +29,7 @@ defmodule ClaperWeb.EventLive.FormComponent do
|
||||
<path d="M17 12h.01"></path>
|
||||
<path d="M13 12h.01"></path>
|
||||
</svg>
|
||||
<span class="font-bold"><%= gettext("See current form") %></span>
|
||||
<span class="font-bold">{gettext("See current form")}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -48,8 +48,8 @@ defmodule ClaperWeb.EventLive.FormComponent do
|
||||
</svg>
|
||||
</div>
|
||||
|
||||
<p class="text-xs text-gray-500 my-1"><%= gettext("Current form") %></p>
|
||||
<p class="text-white text-lg font-semibold mb-4"><%= @form.title %></p>
|
||||
<p class="text-xs text-gray-500 my-1">{gettext("Current form")}</p>
|
||||
<p class="text-white text-lg font-semibold mb-4">{@form.title}</p>
|
||||
</div>
|
||||
<%= form_for :form_submit, "#", [id: @id, phx_change: "validate", phx_target: @myself, phx_submit: "submit"], fn f -> %>
|
||||
<div class="flex flex-col space-y-3">
|
||||
@@ -94,7 +94,7 @@ defmodule ClaperWeb.EventLive.FormComponent do
|
||||
type="submit"
|
||||
class="px-3 py-2 text-white font-semibold bg-primary-500 hover:bg-primary-600 rounded-md my-5"
|
||||
>
|
||||
<%= if is_nil(assigns.current_form_submit), do: gettext("Submit"), else: gettext("Edit") %>
|
||||
{if is_nil(assigns.current_form_submit), do: gettext("Submit"), else: gettext("Edit")}
|
||||
</button>
|
||||
|
||||
<%= unless is_nil(assigns.current_form_submit) do %>
|
||||
@@ -111,7 +111,7 @@ defmodule ClaperWeb.EventLive.FormComponent do
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" /><path d="M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0" /><path d="M9 12l2 2l4 -4" />
|
||||
</svg>
|
||||
<span><%= gettext("Saved") %></span>
|
||||
<span>{gettext("Saved")}</span>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
/>
|
||||
</svg>
|
||||
|
||||
<span><%= gettext("How it works ?") %></span>
|
||||
<span>{gettext("How it works ?")}</span>
|
||||
</button>
|
||||
</div>
|
||||
<%= if @live_action in [:new, :edit] do %>
|
||||
@@ -90,7 +90,7 @@
|
||||
phx_disable_with="Loading..."
|
||||
class="mt-5 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"
|
||||
>
|
||||
<%= gettext("Create") %>
|
||||
{gettext("Create")}
|
||||
</button>
|
||||
</.form>
|
||||
</div>
|
||||
@@ -108,7 +108,7 @@
|
||||
>
|
||||
<div class="flex-1 min-w-0">
|
||||
<h1 class="text-2xl font-medium leading-6 text-gray-900 sm:truncate">
|
||||
<%= gettext("My events") %>
|
||||
{gettext("My events")}
|
||||
</h1>
|
||||
</div>
|
||||
<div class="flex flex-col w-full items-center sm:w-auto sm:flex-row mt-0">
|
||||
@@ -138,7 +138,7 @@
|
||||
/>
|
||||
</svg>
|
||||
<span>
|
||||
<%= gettext("Quick event") %>
|
||||
{gettext("Quick event")}
|
||||
</span>
|
||||
</.link>
|
||||
<.link
|
||||
@@ -163,7 +163,7 @@
|
||||
/>
|
||||
</svg>
|
||||
<span>
|
||||
<%= gettext("Create event") %>
|
||||
{gettext("Create event")}
|
||||
</span>
|
||||
</.link>
|
||||
</div>
|
||||
@@ -175,7 +175,7 @@
|
||||
phx-value-tab="not_expired"
|
||||
class={"#{if @active_tab == "not_expired", do: "bg-primary-100 text-primary-700", else: "text-gray-500 hover:text-gray-700"} px-3 py-2 font-medium rounded-md"}
|
||||
>
|
||||
<%= gettext("Active") %>
|
||||
{gettext("Active")}
|
||||
</button>
|
||||
<button
|
||||
phx-click="change-tab"
|
||||
@@ -183,7 +183,7 @@
|
||||
disabled={not @has_expired_events}
|
||||
class={"#{if @active_tab == "expired", do: "bg-primary-100 text-primary-700", else: "text-gray-500 hover:text-gray-700"} px-3 py-2 font-medium rounded-md #{if not @has_expired_events, do: "opacity-50"}"}
|
||||
>
|
||||
<%= gettext("Finished") %>
|
||||
{gettext("Finished")}
|
||||
</button>
|
||||
<button
|
||||
phx-click="change-tab"
|
||||
@@ -191,7 +191,7 @@
|
||||
disabled={not @has_invited_events}
|
||||
class={"#{if @active_tab == "invited", do: "bg-primary-100 text-primary-700", else: "text-gray-500 hover:text-gray-700"} px-3 py-2 font-medium rounded-md #{if not @has_invited_events, do: "opacity-50"}"}
|
||||
>
|
||||
<%= gettext("Shared with you") %>
|
||||
{gettext("Shared with you")}
|
||||
</button>
|
||||
</nav>
|
||||
|
||||
@@ -214,14 +214,14 @@
|
||||
phx-click="load-more"
|
||||
class="inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md text-primary-700 bg-primary-100 hover:bg-primary-200 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary-500"
|
||||
>
|
||||
<%= gettext("Load more") %>
|
||||
{gettext("Load more")}
|
||||
</button>
|
||||
</div>
|
||||
<% end %>
|
||||
<%= if Enum.count(@events) == 0 do %>
|
||||
<div class="w-full text-2xl text-black opacity-25 text-center">
|
||||
<img src="/images/icons/arrow.svg" class="h-20 float-right mr-16 -mt-5" />
|
||||
<p class="pt-12 clear-both"><%= gettext("Create your first event") %></p>
|
||||
<p class="pt-12 clear-both">{gettext("Create your first event")}</p>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
@@ -21,21 +21,21 @@
|
||||
@click.away="open = false"
|
||||
>
|
||||
<a href="https://get.claper.co/" class="text-sm font-semibold text-black">
|
||||
<%= gettext("About") %>
|
||||
{gettext("About")}
|
||||
</a>
|
||||
<%= if @current_user do %>
|
||||
<.link
|
||||
href={~p"/events"}
|
||||
class="relative inline-flex items-center px-4 py-1 text-base font-sm rounded-md text-white bg-gradient-to-tl from-primary-500 to-secondary-500 bg-size-200 bg-pos-0 hover:bg-pos-100 transition-all duration-500"
|
||||
>
|
||||
<%= gettext("Dashboard") %>
|
||||
{gettext("Dashboard")}
|
||||
</.link>
|
||||
<% else %>
|
||||
<.link
|
||||
href={~p"/users/log_in"}
|
||||
class="relative inline-flex items-center px-4 py-1 text-base font-sm rounded-md text-white bg-gradient-to-tl from-primary-500 to-secondary-500 bg-size-200 bg-pos-0 hover:bg-pos-100 transition-all duration-500"
|
||||
>
|
||||
<%= gettext("Login") %>
|
||||
{gettext("Login")}
|
||||
</.link>
|
||||
<% end %>
|
||||
</div>
|
||||
@@ -44,21 +44,21 @@
|
||||
</button>
|
||||
<div class="hidden md:block">
|
||||
<a href="https://get.claper.co/" class="text-sm text-white font-semibold mr-3">
|
||||
<%= gettext("About") %>
|
||||
{gettext("About")}
|
||||
</a>
|
||||
<%= if @current_user do %>
|
||||
<.link
|
||||
href={~p"/events"}
|
||||
class="relative inline-flex items-center px-4 py-1 text-base font-sm rounded-md text-white bg-gradient-to-tl from-primary-500 to-secondary-500 bg-size-200 bg-pos-0 hover:bg-pos-100 transition-all duration-500"
|
||||
>
|
||||
<%= gettext("Dashboard") %>
|
||||
{gettext("Dashboard")}
|
||||
</.link>
|
||||
<% else %>
|
||||
<.link
|
||||
href={~p"/users/log_in"}
|
||||
class="relative inline-flex items-center px-4 py-1 text-base font-sm rounded-md text-white bg-gradient-to-tl from-primary-500 to-secondary-500 bg-size-200 bg-pos-0 hover:bg-pos-100 transition-all duration-500"
|
||||
>
|
||||
<%= gettext("Login") %>
|
||||
{gettext("Login")}
|
||||
</.link>
|
||||
<% end %>
|
||||
</div>
|
||||
@@ -71,13 +71,13 @@
|
||||
|
||||
<%= form_for :event, ~p"/join", ["phx-submit": "join", "phx-hook": "JoinEvent", id: "form"], fn f -> %>
|
||||
<div class="relative">
|
||||
<%= text_input(f, :code,
|
||||
{text_input(f, :code,
|
||||
required: true,
|
||||
autofocus: true,
|
||||
id: "input",
|
||||
class:
|
||||
"transition-all bg-transparent tracking-widest w-full uppercase text-white text-2xl px-3 border-b border-gray-200 focus:border-b-2 pt-5 pl-12 pb-3 outline-none"
|
||||
) %>
|
||||
)}
|
||||
<img
|
||||
class="icon absolute top-5 left-2 transition-all duration-100"
|
||||
src="/images/icons/hashtag-white.svg"
|
||||
@@ -91,7 +91,7 @@
|
||||
id="submit"
|
||||
class="w-full flex justify-center text-white p-4 rounded-full tracking-wide font-bold outline-none focus:shadow-outline shadow-lg bg-gradient-to-tl from-primary-500 to-secondary-500 bg-size-200 bg-pos-0 hover:bg-pos-100 transition-all duration-500"
|
||||
>
|
||||
<%= gettext("Join") %>
|
||||
{gettext("Join")}
|
||||
</button>
|
||||
<img src="/images/loading.gif" id="loading" class="hidden h-12 mx-auto" />
|
||||
</div>
|
||||
@@ -101,7 +101,7 @@
|
||||
<div class="rounded-md bg-gray-600 bg-opacity-50 p-4 mt-8">
|
||||
<div class="flex justify-center items-center">
|
||||
<p class="text-sm text-white">
|
||||
<%= gettext("Return to your last event") %> (<%= @last_event.name %>)
|
||||
{gettext("Return to your last event")} ({@last_event.name})
|
||||
</p>
|
||||
<p class="text-base ml-3 mt-1">
|
||||
<a href="#" class="whitespace-nowrap font-medium text-white">
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
/>
|
||||
</svg>
|
||||
|
||||
<span><%= gettext("How it works ?") %></span>
|
||||
<span>{gettext("How it works ?")}</span>
|
||||
</button>
|
||||
</div>
|
||||
<div
|
||||
@@ -119,8 +119,8 @@
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" /><path d="M10.585 10.587a2 2 0 0 0 2.829 2.828" /><path d="M16.681 16.673a8.717 8.717 0 0 1 -4.681 1.327c-3.6 0 -6.6 -2 -9 -6c1.272 -2.12 2.712 -3.678 4.32 -4.674m2.86 -1.146a9.055 9.055 0 0 1 1.82 -.18c3.6 0 6.6 2 9 6c-.666 1.11 -1.379 2.067 -2.138 2.87" /><path d="M3 3l18 18" />
|
||||
</svg>
|
||||
|
||||
<span :if={!@preview}><%= gettext("Open preview") %></span>
|
||||
<span :if={@preview}><%= gettext("Close preview") %></span>
|
||||
<span :if={!@preview}>{gettext("Open preview")}</span>
|
||||
<span :if={@preview}>{gettext("Close preview")}</span>
|
||||
</button>
|
||||
<div id="settings-modal-content" class="bg-white p-4">
|
||||
<.live_component
|
||||
@@ -192,10 +192,10 @@
|
||||
</div>
|
||||
<div class="ml-4 flex-auto text-left">
|
||||
<p class="font-medium text-gray-700">
|
||||
<%= gettext("Poll") %>
|
||||
{gettext("Poll")}
|
||||
</p>
|
||||
<p class="text-gray-500">
|
||||
<%= gettext("Add poll to know opinion of your public.") %>
|
||||
{gettext("Add poll to know opinion of your public.")}
|
||||
</p>
|
||||
</div>
|
||||
</a>
|
||||
@@ -225,10 +225,10 @@
|
||||
</div>
|
||||
<div class="ml-4 flex-auto text-left">
|
||||
<p class="font-medium text-gray-700">
|
||||
<%= gettext("Form") %>
|
||||
{gettext("Form")}
|
||||
</p>
|
||||
<p class="text-gray-500">
|
||||
<%= gettext("Add form to collect data from your public.") %>
|
||||
{gettext("Add form to collect data from your public.")}
|
||||
</p>
|
||||
</div>
|
||||
</a>
|
||||
@@ -257,9 +257,9 @@
|
||||
</svg>
|
||||
</div>
|
||||
<div class="ml-4 flex-auto text-left">
|
||||
<p class="font-medium text-gray-700"><%= gettext("Web content") %></p>
|
||||
<p class="font-medium text-gray-700">{gettext("Web content")}</p>
|
||||
<p class="text-gray-500">
|
||||
<%= gettext("Add a Youtube video or any web content.") %>
|
||||
{gettext("Add a Youtube video or any web content.")}
|
||||
</p>
|
||||
</div>
|
||||
</a>
|
||||
@@ -289,9 +289,9 @@
|
||||
</svg>
|
||||
</div>
|
||||
<div class="ml-4 flex-auto text-left">
|
||||
<p class="font-medium text-gray-700"><%= gettext("Quiz") %></p>
|
||||
<p class="font-medium text-gray-700">{gettext("Quiz")}</p>
|
||||
<p class="text-gray-500">
|
||||
<%= gettext("Add a quiz to test knowledge.") %>
|
||||
{gettext("Add a quiz to test knowledge.")}
|
||||
</p>
|
||||
</div>
|
||||
</a>
|
||||
@@ -301,10 +301,10 @@
|
||||
<%= if @create=="poll" do %>
|
||||
<div class="scroll-py-3 overflow-y-auto bg-gray-100 p-3">
|
||||
<p class="text-xl font-bold">
|
||||
<%= case @create_action do
|
||||
{case @create_action do
|
||||
:new -> gettext("New poll")
|
||||
:edit -> gettext("Edit poll")
|
||||
end %>
|
||||
end}
|
||||
</p>
|
||||
<.live_component
|
||||
module={ClaperWeb.PollLive.FormComponent}
|
||||
@@ -322,10 +322,10 @@
|
||||
<%= if @create=="form" do %>
|
||||
<div class="scroll-py-3 overflow-y-auto bg-gray-100 p-3">
|
||||
<p class="text-xl font-bold">
|
||||
<%= case @create_action do
|
||||
{case @create_action do
|
||||
:new -> gettext("New form")
|
||||
:edit -> gettext("Edit form")
|
||||
end %>
|
||||
end}
|
||||
</p>
|
||||
<.live_component
|
||||
module={ClaperWeb.FormLive.FormComponent}
|
||||
@@ -343,10 +343,10 @@
|
||||
<%= 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
|
||||
{case @create_action do
|
||||
:new -> gettext("New web content")
|
||||
:edit -> gettext("Edit web content")
|
||||
end %>
|
||||
end}
|
||||
</p>
|
||||
<.live_component
|
||||
module={ClaperWeb.EmbedLive.FormComponent}
|
||||
@@ -364,10 +364,10 @@
|
||||
<%= if @create=="quiz" do %>
|
||||
<div class="scroll-py-3 overflow-y-auto bg-gray-100 p-3">
|
||||
<p class="text-xl font-bold">
|
||||
<%= case @create_action do
|
||||
{case @create_action do
|
||||
:new -> gettext("New quiz")
|
||||
:edit -> gettext("Edit quiz")
|
||||
end %>
|
||||
end}
|
||||
</p>
|
||||
<.live_component
|
||||
module={ClaperWeb.QuizLive.QuizComponent}
|
||||
@@ -385,7 +385,7 @@
|
||||
<%= 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") %>
|
||||
{gettext("Select presentation")}
|
||||
</p>
|
||||
<ul>
|
||||
<%= for event <- @events do %>
|
||||
@@ -410,7 +410,7 @@
|
||||
/>
|
||||
</svg>
|
||||
<span>
|
||||
<%= event.name %>
|
||||
{event.name}
|
||||
</span>
|
||||
</button>
|
||||
</li>
|
||||
@@ -453,7 +453,7 @@
|
||||
</a>
|
||||
<div class="flex items-center justify-start gap-x-2">
|
||||
<h2 class="text-xl font-bold leading-7 text-gray-900 md:text-2xl truncate w-24 md:w-auto">
|
||||
<%= @event.name %>
|
||||
{@event.name}
|
||||
</h2>
|
||||
<div class="flex gap-x-3 items-center">
|
||||
<div class="flex items-center text-sm text-gray-500 gap-x-1">
|
||||
@@ -471,7 +471,7 @@
|
||||
d="M7 20l4-16m2 16l4-16M6 9h14M4 15h14"
|
||||
/>
|
||||
</svg>
|
||||
<span class="uppercase"><%= @event.code %></span>
|
||||
<span class="uppercase">{@event.code}</span>
|
||||
</div>
|
||||
<div class="flex items-center text-sm text-gray-500 gap-x-1">
|
||||
<svg
|
||||
@@ -487,14 +487,14 @@
|
||||
/>
|
||||
</svg>
|
||||
<span id="attendees-count" phx-update="ignore" phx-hook="UpdateAttendees">
|
||||
<%= @attendees_nb %>
|
||||
{@attendees_nb}
|
||||
</span>
|
||||
<span>
|
||||
<%= link(gettext("Join"),
|
||||
{link(gettext("Join"),
|
||||
to: ~p"/e/#{@event.code}",
|
||||
class: "text-xs text-primary-600 font-semibold text-sm ",
|
||||
target: "_blank"
|
||||
) %>
|
||||
)}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -535,8 +535,8 @@
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" /><path d="M10.585 10.587a2 2 0 0 0 2.829 2.828" /><path d="M16.681 16.673a8.717 8.717 0 0 1 -4.681 1.327c-3.6 0 -6.6 -2 -9 -6c1.272 -2.12 2.712 -3.678 4.32 -4.674m2.86 -1.146a9.055 9.055 0 0 1 1.82 -.18c3.6 0 6.6 2 9 6c-.666 1.11 -1.379 2.067 -2.138 2.87" /><path d="M3 3l18 18" />
|
||||
</svg>
|
||||
|
||||
<span :if={!@preview}><%= gettext("Open preview") %></span>
|
||||
<span :if={@preview}><%= gettext("Close preview") %></span>
|
||||
<span :if={!@preview}>{gettext("Open preview")}</span>
|
||||
<span :if={@preview}>{gettext("Close preview")}</span>
|
||||
</button>
|
||||
<button
|
||||
phx-hook="OpenPresenter"
|
||||
@@ -563,7 +563,7 @@
|
||||
d="M13.5 6H5.25A2.25 2.25 0 0 0 3 8.25v10.5A2.25 2.25 0 0 0 5.25 21h10.5A2.25 2.25 0 0 0 18 18.75V10.5m-10.5 6L21 3m0 0h-5.25M21 3v5.25"
|
||||
/>
|
||||
</svg>
|
||||
<%= gettext("Open presentation") %>
|
||||
{gettext("Open presentation")}
|
||||
</button>
|
||||
</div>
|
||||
<div class="flex items-center gap-x-2 lg:hidden">
|
||||
@@ -737,10 +737,10 @@
|
||||
|
||||
<p class="text-lg">
|
||||
<span :if={@event.presentation_file.length > 0}>
|
||||
<%= gettext("This slide does not have any interactions.") %>
|
||||
{gettext("This slide does not have any interactions.")}
|
||||
</span>
|
||||
<span :if={@event.presentation_file.length == 0}>
|
||||
<%= gettext("Create your first interaction.") %>
|
||||
{gettext("Create your first interaction.")}
|
||||
</span>
|
||||
</p>
|
||||
|
||||
@@ -756,7 +756,7 @@
|
||||
>
|
||||
<path d="M8.75 3.75a.75.75 0 0 0-1.5 0v3.5h-3.5a.75.75 0 0 0 0 1.5h3.5v3.5a.75.75 0 0 0 1.5 0v-3.5h3.5a.75.75 0 0 0 0-1.5h-3.5v-3.5Z" />
|
||||
</svg>
|
||||
<span><%= gettext("Add interaction") %></span>
|
||||
<span>{gettext("Add interaction")}</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="grid grid-cols-1 @sm:grid-cols-2 @lg:grid-cols-3 gap-4 p-4 overflow-y-auto">
|
||||
@@ -783,7 +783,7 @@
|
||||
/>
|
||||
</svg>
|
||||
</div>
|
||||
<span class="font-semibold"><%= gettext("Poll") %></span>
|
||||
<span class="font-semibold">{gettext("Poll")}</span>
|
||||
</div>
|
||||
|
||||
<a
|
||||
@@ -827,7 +827,7 @@
|
||||
/>
|
||||
</svg>
|
||||
</div>
|
||||
<span class="font-semibold"><%= gettext("Form") %></span>
|
||||
<span class="font-semibold">{gettext("Form")}</span>
|
||||
</div>
|
||||
<a
|
||||
class="p-2 rounded text-xs font-medium text-center text-primary-500"
|
||||
@@ -871,7 +871,7 @@
|
||||
</svg>
|
||||
</div>
|
||||
<span class="font-semibold">
|
||||
<%= gettext("Web content") %>
|
||||
{gettext("Web content")}
|
||||
</span>
|
||||
</div>
|
||||
<a
|
||||
@@ -917,7 +917,7 @@
|
||||
</svg>
|
||||
</div>
|
||||
<span class="font-semibold">
|
||||
<%= gettext("Quiz") %>
|
||||
{gettext("Quiz")}
|
||||
</span>
|
||||
<p
|
||||
:if={interaction.lti_resource_id}
|
||||
@@ -1079,7 +1079,7 @@
|
||||
<% end %>
|
||||
<% _ -> %>
|
||||
<% end %>
|
||||
<span><%= interaction.title %></span>
|
||||
<span>{interaction.title}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="w-full">
|
||||
@@ -1098,7 +1098,7 @@
|
||||
phx-value-id={interaction.id}
|
||||
class="bg-supporting-red-100 text-supporting-red-800 px-2 py-2 rounded text-sm font-medium w-full"
|
||||
>
|
||||
<%= gettext("Disable") %>
|
||||
{gettext("Disable")}
|
||||
</button>
|
||||
</div>
|
||||
<% else %>
|
||||
@@ -1115,7 +1115,7 @@
|
||||
phx-value-id={interaction.id}
|
||||
class="bg-primary-100 text-primary-800 px-2 py-2 rounded text-sm font-medium w-full"
|
||||
>
|
||||
<%= gettext("Enable") %>
|
||||
{gettext("Enable")}
|
||||
</button>
|
||||
<% end %>
|
||||
</div>
|
||||
@@ -1129,7 +1129,7 @@
|
||||
>
|
||||
<img src="/images/interaction-icons.png" class="w-2/3 @sm:w-1/3" />
|
||||
<span class="font-semibold text-secondary-800">
|
||||
<%= gettext("Add interaction") %>
|
||||
{gettext("Add interaction")}
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
@@ -1164,35 +1164,35 @@
|
||||
>
|
||||
<li class={"rounded-md #{if @list_tab==:posts, do: "bg-secondary-600 text-white" ,
|
||||
else: "bg-white text-gray-600" } px-2 py-0.5 text-sm shadow-sm"}>
|
||||
<%= link(gettext("Messages") <> " (#{@post_count})",
|
||||
{link(gettext("Messages") <> " (#{@post_count})",
|
||||
to: "#",
|
||||
phx_click: "list-tab",
|
||||
phx_value_tab: :posts
|
||||
) %>
|
||||
)}
|
||||
</li>
|
||||
<li class={"rounded-md #{if @list_tab==:questions, do: "bg-secondary-600 text-white" ,
|
||||
else: "bg-white text-gray-600" } px-2 py-0.5 text-sm shadow-sm"}>
|
||||
<%= link(gettext("Questions") <> " (#{@question_count})",
|
||||
{link(gettext("Questions") <> " (#{@question_count})",
|
||||
to: "#",
|
||||
phx_click: "list-tab",
|
||||
phx_value_tab: :questions
|
||||
) %>
|
||||
)}
|
||||
</li>
|
||||
<li class={"rounded-md #{if @list_tab==:pinned_posts, do: "bg-secondary-600 text-white" ,
|
||||
else: "bg-white text-gray-600" } px-2 py-0.5 text-sm shadow-sm"}>
|
||||
<%= link(gettext("Pinned messages") <> " (#{@pinned_post_count})",
|
||||
{link(gettext("Pinned messages") <> " (#{@pinned_post_count})",
|
||||
to: "#",
|
||||
phx_click: "list-tab",
|
||||
phx_value_tab: :pinned_posts
|
||||
) %>
|
||||
)}
|
||||
</li>
|
||||
<li class={"rounded-md #{if @list_tab==:forms, do: "bg-secondary-600 text-white" ,
|
||||
else: "bg-white text-gray-600" } px-2 py-0.5 text-sm shadow-sm"}>
|
||||
<%= link(gettext("Form submissions") <> " (#{@form_submit_count})",
|
||||
{link(gettext("Form submissions") <> " (#{@form_submit_count})",
|
||||
to: "#",
|
||||
phx_click: "list-tab",
|
||||
phx_value_tab: :forms
|
||||
) %>
|
||||
)}
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
@@ -1218,7 +1218,7 @@
|
||||
</svg>
|
||||
|
||||
<p class="text-lg">
|
||||
<%= gettext("Messages from attendees will appear here.") %>
|
||||
{gettext("Messages from attendees will appear here.")}
|
||||
</p>
|
||||
</div>
|
||||
<div
|
||||
@@ -1259,7 +1259,7 @@
|
||||
</svg>
|
||||
|
||||
<p class="text-lg">
|
||||
<%= gettext("Questions will appear here.") %>
|
||||
{gettext("Questions will appear here.")}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -1280,7 +1280,7 @@
|
||||
</svg>
|
||||
|
||||
<p class="flex items-center gap-x-1">
|
||||
<%= gettext("Sort by popularity") %>
|
||||
{gettext("Sort by popularity")}
|
||||
</p>
|
||||
</button>
|
||||
<button
|
||||
@@ -1301,7 +1301,7 @@
|
||||
/>
|
||||
</svg>
|
||||
|
||||
<span><%= gettext("Sort by date") %></span>
|
||||
<span>{gettext("Sort by date")}</span>
|
||||
</button>
|
||||
</div>
|
||||
<div
|
||||
@@ -1341,7 +1341,7 @@
|
||||
</svg>
|
||||
|
||||
<p class="text-lg">
|
||||
<%= gettext("Pinned messages will appear here.") %>
|
||||
{gettext("Pinned messages will appear here.")}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -1387,7 +1387,7 @@
|
||||
</svg>
|
||||
|
||||
<p class="text-lg">
|
||||
<%= gettext("Form submissions from attendees will appear here.") %>
|
||||
{gettext("Form submissions from attendees will appear here.")}
|
||||
</p>
|
||||
</div>
|
||||
<% end %>
|
||||
@@ -1402,20 +1402,20 @@
|
||||
<div class="px-4 pb-2 pt-3 rounded-b-lg rounded-tr-lg bg-white relative shadow-md text-black break-all mt-2">
|
||||
<div class="float-right mr-1">
|
||||
<span class="text-red-500">
|
||||
<%= link(gettext("Delete"),
|
||||
{link(gettext("Delete"),
|
||||
to: "#",
|
||||
phx_click: "delete-form-submit",
|
||||
phx_value_id: submission.id,
|
||||
phx_value_event_id: @event.uuid,
|
||||
data: [confirm: gettext("This cannot be undone, confirm ?")]
|
||||
) %>
|
||||
)}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
<span class="font-semibold text-lg">
|
||||
<%= gettext("Form") %>
|
||||
</span>: <%= submission.form.title %>
|
||||
</span>: {submission.form.title}
|
||||
</p>
|
||||
|
||||
<div class="flex space-x-3 items-center">
|
||||
@@ -1435,9 +1435,9 @@
|
||||
<%= for res <- submission.response do %>
|
||||
<p>
|
||||
<strong>
|
||||
<%= elem(res, 0) %>:
|
||||
{elem(res, 0)}:
|
||||
</strong>
|
||||
<%= elem(res, 1) %>
|
||||
{elem(res, 1)}
|
||||
</p>
|
||||
<% end %>
|
||||
</div>
|
||||
@@ -1460,7 +1460,7 @@
|
||||
data-tg-group="manage"
|
||||
>
|
||||
<div class="w-full h-12 bg-gray-100 font-semibold text-xl flex items-center justify-center">
|
||||
<%= gettext("Settings") %>
|
||||
{gettext("Settings")}
|
||||
</div>
|
||||
|
||||
<.live_component
|
||||
|
||||
@@ -26,12 +26,12 @@ defmodule ClaperWeb.EventLive.ManageablePostComponent do
|
||||
/>
|
||||
</svg>
|
||||
|
||||
<span><%= gettext("Question") %></span>
|
||||
<span>{gettext("Question")}</span>
|
||||
</div>
|
||||
<div :if={!@readonly} class="float-right mr-1">
|
||||
<%= if @post.attendee_identifier do %>
|
||||
<span class="text-yellow-500">
|
||||
<%= link(
|
||||
{link(
|
||||
if @post.pinned do
|
||||
gettext("Unpin")
|
||||
else
|
||||
@@ -41,11 +41,11 @@ defmodule ClaperWeb.EventLive.ManageablePostComponent do
|
||||
phx_click: "pin",
|
||||
phx_value_id: @post.uuid,
|
||||
phx_value_event_id: @event.uuid
|
||||
) %>
|
||||
)}
|
||||
</span>
|
||||
/
|
||||
<span class="text-red-500">
|
||||
<%= link(gettext("Ban"),
|
||||
{link(gettext("Ban"),
|
||||
to: "#",
|
||||
phx_click: "ban",
|
||||
phx_value_attendee_identifier: @post.attendee_identifier,
|
||||
@@ -55,12 +55,12 @@ defmodule ClaperWeb.EventLive.ManageablePostComponent do
|
||||
"Blocking this user will delete all his messages and he will not be able to join again, confirm ?"
|
||||
)
|
||||
]
|
||||
) %>
|
||||
)}
|
||||
</span>
|
||||
/
|
||||
<% else %>
|
||||
<span class="text-yellow-500">
|
||||
<%= link(
|
||||
{link(
|
||||
if @post.pinned do
|
||||
gettext("Unpin")
|
||||
else
|
||||
@@ -70,11 +70,11 @@ defmodule ClaperWeb.EventLive.ManageablePostComponent do
|
||||
phx_click: "pin",
|
||||
phx_value_id: @post.uuid,
|
||||
phx_value_event_id: @event.uuid
|
||||
) %>
|
||||
)}
|
||||
</span>
|
||||
/
|
||||
<span class="text-red-500">
|
||||
<%= link(gettext("Ban"),
|
||||
{link(gettext("Ban"),
|
||||
to: "#",
|
||||
phx_click: "ban",
|
||||
phx_value_user_id: @post.user_id,
|
||||
@@ -84,17 +84,17 @@ defmodule ClaperWeb.EventLive.ManageablePostComponent do
|
||||
"Blocking this user will delete all his messages and he will not be able to join again, confirm ?"
|
||||
)
|
||||
]
|
||||
) %>
|
||||
)}
|
||||
</span>
|
||||
/
|
||||
<% end %>
|
||||
<span class="text-red-500">
|
||||
<%= link(gettext("Delete"),
|
||||
{link(gettext("Delete"),
|
||||
to: "#",
|
||||
phx_click: "delete",
|
||||
phx_value_id: @post.uuid,
|
||||
phx_value_event_id: @event.uuid
|
||||
) %>
|
||||
)}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
@@ -114,12 +114,12 @@ defmodule ClaperWeb.EventLive.ManageablePostComponent do
|
||||
<div class="flex flex-col">
|
||||
<%= if @post.name do %>
|
||||
<p class="text-black text-sm font-semibold mr-2">
|
||||
<%= @post.name %>
|
||||
{@post.name}
|
||||
</p>
|
||||
<% end %>
|
||||
|
||||
<p class="text-xl">
|
||||
<%= ClaperWeb.Helpers.format_body(@post.body) %>
|
||||
{ClaperWeb.Helpers.format_body(@post.body)}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -130,7 +130,7 @@ defmodule ClaperWeb.EventLive.ManageablePostComponent do
|
||||
<%= if @post.like_count> 0 do %>
|
||||
<img src="/images/icons/thumb.svg" class="h-4" />
|
||||
<span class="ml-1">
|
||||
<%= @post.like_count %>
|
||||
{@post.like_count}
|
||||
</span>
|
||||
<% end %>
|
||||
</div>
|
||||
@@ -138,7 +138,7 @@ defmodule ClaperWeb.EventLive.ManageablePostComponent do
|
||||
<%= if @post.love_count> 0 do %>
|
||||
<img src="/images/icons/heart.svg" class="h-4" />
|
||||
<span class="ml-1">
|
||||
<%= @post.love_count %>
|
||||
{@post.love_count}
|
||||
</span>
|
||||
<% end %>
|
||||
</div>
|
||||
@@ -146,7 +146,7 @@ defmodule ClaperWeb.EventLive.ManageablePostComponent do
|
||||
<%= if @post.lol_count> 0 do %>
|
||||
<img src="/images/icons/laugh.svg" class="h-4" />
|
||||
<span class="ml-1">
|
||||
<%= @post.lol_count %>
|
||||
{@post.lol_count}
|
||||
</span>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
@@ -16,9 +16,9 @@ defmodule ClaperWeb.EventLive.ManageableQuizComponent do
|
||||
>
|
||||
<div class="w-full md:w-1/2 mx-auto h-full">
|
||||
<p class={"#{if @iframe, do: "text-xl mb-12", else: "text-5xl mb-24"} text-white font-bold text-center"}>
|
||||
<span :if={@current_question_idx < 0}><%= @quiz.title %></span>
|
||||
<span :if={@current_question_idx < 0}>{@quiz.title}</span>
|
||||
<span :if={@current_question_idx >= 0}>
|
||||
<%= Enum.at(@quiz.quiz_questions, @current_question_idx).content %>
|
||||
{Enum.at(@quiz.quiz_questions, @current_question_idx).content}
|
||||
</span>
|
||||
</p>
|
||||
|
||||
@@ -26,9 +26,9 @@ defmodule ClaperWeb.EventLive.ManageableQuizComponent do
|
||||
:if={@current_question_idx == -1}
|
||||
class={"#{if @iframe, do: "space-y-5", else: "space-y-8"} flex flex-col text-white text-center"}
|
||||
>
|
||||
<p class="font-semibold text-2xl"><%= gettext("Average score") %>:</p>
|
||||
<p class="font-semibold text-2xl">{gettext("Average score")}:</p>
|
||||
<p class="font-semibold text-7xl">
|
||||
<%= Claper.Quizzes.calculate_average_score(@quiz.id) %>/<%= length(@quiz.quiz_questions) %>
|
||||
{Claper.Quizzes.calculate_average_score(@quiz.id)}/{length(@quiz.quiz_questions)}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -41,8 +41,8 @@ defmodule ClaperWeb.EventLive.ManageableQuizComponent do
|
||||
<div class="bg-gradient-to-r from-primary-500 to-secondary-500 h-full absolute left-0 transition-all rounded-l-3xl">
|
||||
</div>
|
||||
<div class="flex space-x-3 justify-between w-full items-center z-10 text-left">
|
||||
<span class="flex-1 pr-2 text-3xl"><%= opt.content %></span>
|
||||
<span class="text-xl"><%= opt.percentage %>% (<%= opt.response_count %>)</span>
|
||||
<span class="flex-1 pr-2 text-3xl">{opt.content}</span>
|
||||
<span class="text-xl">{opt.percentage}% ({opt.response_count})</span>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
@@ -19,7 +19,7 @@ defmodule ClaperWeb.EventLive.ManagerSettingsComponent do
|
||||
<path d="M10.766 7.51a.75.75 0 0 0-1.37.365l-.492 6.861a.75.75 0 0 0 1.204.65l1.043-.799.985 3.678a.75.75 0 0 0 1.45-.388l-.978-3.646 1.292.204a.75.75 0 0 0 .74-1.16l-3.874-5.764Z" />
|
||||
</svg>
|
||||
|
||||
<span><%= gettext("Interaction") %></span>
|
||||
<span>{gettext("Interaction")}</span>
|
||||
</div>
|
||||
|
||||
<%= case @current_interaction do %>
|
||||
@@ -59,10 +59,10 @@ defmodule ClaperWeb.EventLive.ManagerSettingsComponent do
|
||||
</svg>
|
||||
|
||||
<span :if={@state.poll_visible}>
|
||||
<%= gettext("Hide results on presentation") %>
|
||||
{gettext("Hide results on presentation")}
|
||||
</span>
|
||||
<span :if={!@state.poll_visible}>
|
||||
<%= gettext("Show results on presentation") %>
|
||||
{gettext("Show results on presentation")}
|
||||
</span>
|
||||
<code
|
||||
:if={@show_shortcut}
|
||||
@@ -109,10 +109,10 @@ defmodule ClaperWeb.EventLive.ManagerSettingsComponent do
|
||||
</svg>
|
||||
|
||||
<span :if={@current_interaction.show_results}>
|
||||
<%= gettext("Hide results on presentation") %>
|
||||
{gettext("Hide results on presentation")}
|
||||
</span>
|
||||
<span :if={!@current_interaction.show_results}>
|
||||
<%= gettext("Show results on presentation") %>
|
||||
{gettext("Show results on presentation")}
|
||||
</span>
|
||||
<code
|
||||
:if={@show_shortcut}
|
||||
@@ -141,7 +141,7 @@ defmodule ClaperWeb.EventLive.ManagerSettingsComponent do
|
||||
</svg>
|
||||
|
||||
<span>
|
||||
<%= gettext("Review questions") %>
|
||||
{gettext("Review questions")}
|
||||
</span>
|
||||
<div></div>
|
||||
</ClaperWeb.Component.Input.check_button>
|
||||
@@ -165,7 +165,7 @@ defmodule ClaperWeb.EventLive.ManagerSettingsComponent do
|
||||
</svg>
|
||||
|
||||
<span>
|
||||
<%= gettext("Previous") %>
|
||||
{gettext("Previous")}
|
||||
</span>
|
||||
</ClaperWeb.Component.Input.check_button>
|
||||
<ClaperWeb.Component.Input.check_button
|
||||
@@ -173,7 +173,7 @@ defmodule ClaperWeb.EventLive.ManagerSettingsComponent do
|
||||
key={:next_quiz_question}
|
||||
>
|
||||
<span>
|
||||
<%= gettext("Next") %>
|
||||
{gettext("Next")}
|
||||
</span>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
@@ -214,7 +214,7 @@ defmodule ClaperWeb.EventLive.ManagerSettingsComponent do
|
||||
/>
|
||||
</svg>
|
||||
|
||||
<span><%= gettext("Presentation") %></span>
|
||||
<span>{gettext("Presentation")}</span>
|
||||
</div>
|
||||
|
||||
<div class="flex space-x-1 items-center mt-3">
|
||||
@@ -252,10 +252,10 @@ defmodule ClaperWeb.EventLive.ManagerSettingsComponent do
|
||||
</svg>
|
||||
<div>
|
||||
<span :if={!@state.join_screen_visible}>
|
||||
<%= gettext("Show instructions to join") %>
|
||||
{gettext("Show instructions to join")}
|
||||
</span>
|
||||
<span :if={@state.join_screen_visible}>
|
||||
<%= gettext("Hide instructions to join") %>
|
||||
{gettext("Hide instructions to join")}
|
||||
</span>
|
||||
</div>
|
||||
<code
|
||||
@@ -301,8 +301,8 @@ defmodule ClaperWeb.EventLive.ManagerSettingsComponent do
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" /><path d="M8 9h1m4 0h3" /><path d="M8 13h5" /><path d="M8 4h10a3 3 0 0 1 3 3v8c0 .577 -.163 1.116 -.445 1.573m-2.555 1.427h-5l-5 3v-3h-2a3 3 0 0 1 -3 -3v-8c0 -1.085 .576 -2.036 1.439 -2.562" /><path d="M3 3l18 18" />
|
||||
</svg>
|
||||
<div>
|
||||
<span :if={!@state.chat_visible}><%= gettext("Show messages") %></span>
|
||||
<span :if={@state.chat_visible}><%= gettext("Hide messages") %></span>
|
||||
<span :if={!@state.chat_visible}>{gettext("Show messages")}</span>
|
||||
<span :if={@state.chat_visible}>{gettext("Hide messages")}</span>
|
||||
</div>
|
||||
<code
|
||||
:if={@show_shortcut}
|
||||
@@ -356,9 +356,9 @@ defmodule ClaperWeb.EventLive.ManagerSettingsComponent do
|
||||
</svg>
|
||||
<div>
|
||||
<span :if={!@state.show_only_pinned}>
|
||||
<%= gettext("Show only pinned messages") %>
|
||||
{gettext("Show only pinned messages")}
|
||||
</span>
|
||||
<span :if={@state.show_only_pinned}><%= gettext("Show all messages") %></span>
|
||||
<span :if={@state.show_only_pinned}>{gettext("Show all messages")}</span>
|
||||
</div>
|
||||
<code
|
||||
:if={@show_shortcut}
|
||||
@@ -387,7 +387,7 @@ defmodule ClaperWeb.EventLive.ManagerSettingsComponent do
|
||||
/>
|
||||
</svg>
|
||||
|
||||
<span><%= gettext("Attendees") %></span>
|
||||
<span>{gettext("Attendees")}</span>
|
||||
</div>
|
||||
|
||||
<div class="flex space-x-2 items-center mt-3">
|
||||
@@ -423,8 +423,8 @@ defmodule ClaperWeb.EventLive.ManagerSettingsComponent do
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" /><path d="M8 9h1m4 0h3" /><path d="M8 13h5" /><path d="M8 4h10a3 3 0 0 1 3 3v8c0 .577 -.163 1.116 -.445 1.573m-2.555 1.427h-5l-5 3v-3h-2a3 3 0 0 1 -3 -3v-8c0 -1.085 .576 -2.036 1.439 -2.562" /><path d="M3 3l18 18" />
|
||||
</svg>
|
||||
<div>
|
||||
<span :if={!@state.chat_enabled}><%= gettext("Enable messages") %></span>
|
||||
<span :if={@state.chat_enabled}><%= gettext("Disable messages") %></span>
|
||||
<span :if={!@state.chat_enabled}>{gettext("Enable messages")}</span>
|
||||
<span :if={@state.chat_enabled}>{gettext("Disable messages")}</span>
|
||||
</div>
|
||||
<code
|
||||
:if={@show_shortcut}
|
||||
@@ -479,10 +479,10 @@ defmodule ClaperWeb.EventLive.ManagerSettingsComponent do
|
||||
|
||||
<div>
|
||||
<span :if={!@state.anonymous_chat_enabled}>
|
||||
<%= gettext("Allow anonymous messages") %>
|
||||
{gettext("Allow anonymous messages")}
|
||||
</span>
|
||||
<span :if={@state.anonymous_chat_enabled}>
|
||||
<%= gettext("Deny anonymous messages") %>
|
||||
{gettext("Deny anonymous messages")}
|
||||
</span>
|
||||
</div>
|
||||
<code
|
||||
@@ -530,10 +530,10 @@ defmodule ClaperWeb.EventLive.ManagerSettingsComponent do
|
||||
|
||||
<div>
|
||||
<span :if={!@state.message_reaction_enabled}>
|
||||
<%= gettext("Enable reactions") %>
|
||||
{gettext("Enable reactions")}
|
||||
</span>
|
||||
<span :if={@state.message_reaction_enabled}>
|
||||
<%= gettext("Disable reactions") %>
|
||||
{gettext("Disable reactions")}
|
||||
</span>
|
||||
</div>
|
||||
<code
|
||||
|
||||
@@ -25,7 +25,7 @@ defmodule ClaperWeb.EventLive.PollComponent do
|
||||
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>
|
||||
<span class="font-bold"><%= gettext("See current poll") %></span>
|
||||
<span class="font-bold">{gettext("See current poll")}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -44,12 +44,12 @@ defmodule ClaperWeb.EventLive.PollComponent do
|
||||
</svg>
|
||||
</div>
|
||||
|
||||
<p class="text-sm text-gray-400 my-1"><%= gettext("Current poll") %></p>
|
||||
<p class="text-white text-xl font-semibold mb-2"><%= @poll.title %></p>
|
||||
<p class="text-sm text-gray-400 my-1">{gettext("Current poll")}</p>
|
||||
<p class="text-white text-xl font-semibold mb-2">{@poll.title}</p>
|
||||
<%= if @poll.multiple do %>
|
||||
<p class="text-gray-400 text-sm mb-4"><%= gettext("Select one or multiple options") %></p>
|
||||
<p class="text-gray-400 text-sm mb-4">{gettext("Select one or multiple options")}</p>
|
||||
<% else %>
|
||||
<p class="text-gray-400 text-sm mb-4"><%= gettext("Select one option") %></p>
|
||||
<p class="text-gray-400 text-sm mb-4">{gettext("Select one option")}</p>
|
||||
<% end %>
|
||||
</div>
|
||||
<div>
|
||||
@@ -78,10 +78,10 @@ defmodule ClaperWeb.EventLive.PollComponent do
|
||||
</span>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<span class="flex-1 pr-2"><%= opt.content %></span>
|
||||
<span class="flex-1 pr-2">{opt.content}</span>
|
||||
</div>
|
||||
<span :if={@show_results} class="text-sm z-10">
|
||||
<%= opt.percentage %>% (<%= opt.vote_count %>)
|
||||
{opt.percentage}% ({opt.vote_count})
|
||||
</span>
|
||||
</button>
|
||||
<% else %>
|
||||
@@ -111,10 +111,10 @@ defmodule ClaperWeb.EventLive.PollComponent do
|
||||
</span>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<span class="flex-1 pr-2"><%= opt.content %></span>
|
||||
<span class="flex-1 pr-2">{opt.content}</span>
|
||||
</div>
|
||||
<span :if={@show_results} class="text-sm z-10">
|
||||
<%= opt.percentage %>% (<%= opt.vote_count %>)
|
||||
{opt.percentage}% ({opt.vote_count})
|
||||
</span>
|
||||
</button>
|
||||
<% end %>
|
||||
@@ -124,7 +124,7 @@ defmodule ClaperWeb.EventLive.PollComponent do
|
||||
|
||||
<%= if (length @selected_poll_opt) == 0 || (length @current_poll_vote) > 0 do %>
|
||||
<button class="px-3 py-2 text-white font-medium bg-gray-500 rounded-md mt-3 mb-4 cursor-default">
|
||||
<%= gettext("Vote") %>
|
||||
{gettext("Vote")}
|
||||
</button>
|
||||
<% else %>
|
||||
<button
|
||||
@@ -132,7 +132,7 @@ defmodule ClaperWeb.EventLive.PollComponent do
|
||||
phx-disable-with="..."
|
||||
class="px-3 py-2 text-white font-medium bg-primary-400 hover:bg-primary-500 rounded-md mt-3 mb-4"
|
||||
>
|
||||
<%= gettext("Vote") %>
|
||||
{gettext("Vote")}
|
||||
</button>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
@@ -25,12 +25,12 @@ defmodule ClaperWeb.EventLive.PostComponent do
|
||||
<%= if @post.name || leader?(@post, @event, @leaders) || pinned?(@post) do %>
|
||||
<div class="inline-flex items-center">
|
||||
<%= if @post.name do %>
|
||||
<p class="text-white text-xs font-semibold mb-2 mr-2"><%= @post.name %></p>
|
||||
<p class="text-white text-xs font-semibold mb-2 mr-2">{@post.name}</p>
|
||||
<% end %>
|
||||
<%= if leader?(@post, @event, @leaders) do %>
|
||||
<div class="inline-flex items-center space-x-1 justify-center px-3 py-0.5 rounded-full text-xs font-medium bg-supporting-yellow-100 text-supporting-yellow-800 mb-2">
|
||||
<img src="/images/icons/star.svg" class="h-3" />
|
||||
<span><%= gettext("Host") %></span>
|
||||
<span>{gettext("Host")}</span>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
@@ -56,7 +56,7 @@ defmodule ClaperWeb.EventLive.PostComponent do
|
||||
>
|
||||
</path>
|
||||
</svg>
|
||||
<span><%= gettext("Pinned") %></span>
|
||||
<span>{gettext("Pinned")}</span>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
@@ -67,34 +67,34 @@ defmodule ClaperWeb.EventLive.PostComponent do
|
||||
class="hidden absolute right-4 top-7 bg-white rounded-lg px-5 py-2 animate__faster"
|
||||
>
|
||||
<span class="text-red-500">
|
||||
<%= link(gettext("Delete"),
|
||||
{link(gettext("Delete"),
|
||||
to: "#",
|
||||
phx_click: "delete",
|
||||
phx_value_id: @post.uuid,
|
||||
phx_value_event_id: @event.uuid,
|
||||
data: [confirm: gettext("Are you sure?")]
|
||||
) %>
|
||||
)}
|
||||
</span>
|
||||
</div>
|
||||
<p><%= ClaperWeb.Helpers.format_body(@post.body) %></p>
|
||||
<p>{ClaperWeb.Helpers.format_body(@post.body)}</p>
|
||||
|
||||
<div class="flex h-6 text-sm float-right text-white space-x-2">
|
||||
<%= if @post.like_count > 0 do %>
|
||||
<div class="flex px-1 items-center">
|
||||
<img src="/images/icons/thumb.svg" class="h-4" />
|
||||
<span class="ml-1 text-white"><%= @post.like_count %></span>
|
||||
<span class="ml-1 text-white">{@post.like_count}</span>
|
||||
</div>
|
||||
<% end %>
|
||||
<%= if @post.love_count > 0 do %>
|
||||
<div class="flex px-1 items-center">
|
||||
<img src="/images/icons/heart.svg" class="h-4" />
|
||||
<span class="ml-1 text-white"><%= @post.love_count %></span>
|
||||
<span class="ml-1 text-white">{@post.love_count}</span>
|
||||
</div>
|
||||
<% end %>
|
||||
<%= if @post.lol_count > 0 do %>
|
||||
<div class="flex px-1 items-center">
|
||||
<img src="/images/icons/laugh.svg" class="h-4" />
|
||||
<span class="ml-1 text-white"><%= @post.lol_count %></span>
|
||||
<span class="ml-1 text-white">{@post.lol_count}</span>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
@@ -104,12 +104,12 @@ defmodule ClaperWeb.EventLive.PostComponent do
|
||||
<%= if @post.name || leader?(@post, @event, @leaders) do %>
|
||||
<div class="inline-flex items-center">
|
||||
<%= if @post.name do %>
|
||||
<p class="text-black text-xs font-semibold mb-2 mr-2"><%= @post.name %></p>
|
||||
<p class="text-black text-xs font-semibold mb-2 mr-2">{@post.name}</p>
|
||||
<% end %>
|
||||
<%= if leader?(@post, @event, @leaders) do %>
|
||||
<div class="inline-flex items-center space-x-1 justify-center px-3 py-0.5 rounded-full text-xs font-medium bg-supporting-yellow-100 text-supporting-yellow-800 mb-2">
|
||||
<img src="/images/icons/star.svg" class="h-3" />
|
||||
<span><%= gettext("Host") %></span>
|
||||
<span>{gettext("Host")}</span>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
@@ -139,13 +139,13 @@ defmodule ClaperWeb.EventLive.PostComponent do
|
||||
class="hidden absolute right-4 top-7 bg-gray-900 rounded-lg px-5 py-2"
|
||||
>
|
||||
<span class="text-red-500">
|
||||
<%= link(gettext("Delete"),
|
||||
{link(gettext("Delete"),
|
||||
to: "#",
|
||||
phx_click: "delete",
|
||||
phx_value_id: @post.uuid,
|
||||
phx_value_event_id: @event.uuid,
|
||||
data: [confirm: gettext("Are you sure?")]
|
||||
) %>
|
||||
)}
|
||||
</span>
|
||||
</div>
|
||||
<% end %>
|
||||
@@ -172,11 +172,11 @@ defmodule ClaperWeb.EventLive.PostComponent do
|
||||
>
|
||||
</path>
|
||||
</svg>
|
||||
<span><%= gettext("Pinned") %></span>
|
||||
<span>{gettext("Pinned")}</span>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<p><%= ClaperWeb.Helpers.format_body(@post.body) %></p>
|
||||
<p>{ClaperWeb.Helpers.format_body(@post.body)}</p>
|
||||
|
||||
<div class="flex h-6 text-xs float-right space-x-2">
|
||||
<%= if @reaction_enabled do %>
|
||||
@@ -189,7 +189,7 @@ defmodule ClaperWeb.EventLive.PostComponent do
|
||||
>
|
||||
<img src="/images/icons/thumb.svg" class="h-4" />
|
||||
<%= if @post.like_count > 0 do %>
|
||||
<span class="ml-1"><%= @post.like_count %></span>
|
||||
<span class="ml-1">{@post.like_count}</span>
|
||||
<% end %>
|
||||
</button>
|
||||
<% else %>
|
||||
@@ -203,7 +203,7 @@ defmodule ClaperWeb.EventLive.PostComponent do
|
||||
<img src="/images/icons/thumb.svg" class="h-4" />
|
||||
</span>
|
||||
<%= if @post.like_count > 0 do %>
|
||||
<span class="ml-1"><%= @post.like_count %></span>
|
||||
<span class="ml-1">{@post.like_count}</span>
|
||||
<% end %>
|
||||
</button>
|
||||
<% end %>
|
||||
@@ -216,7 +216,7 @@ defmodule ClaperWeb.EventLive.PostComponent do
|
||||
>
|
||||
<img src="/images/icons/heart.svg" class="h-4" />
|
||||
<%= if @post.love_count > 0 do %>
|
||||
<span class="ml-1"><%= @post.love_count %></span>
|
||||
<span class="ml-1">{@post.love_count}</span>
|
||||
<% end %>
|
||||
</button>
|
||||
<% else %>
|
||||
@@ -228,7 +228,7 @@ defmodule ClaperWeb.EventLive.PostComponent do
|
||||
>
|
||||
<img src="/images/icons/heart.svg" class="h-4" />
|
||||
<%= if @post.love_count > 0 do %>
|
||||
<span class="ml-1"><%= @post.love_count %></span>
|
||||
<span class="ml-1">{@post.love_count}</span>
|
||||
<% end %>
|
||||
</button>
|
||||
<% end %>
|
||||
@@ -241,7 +241,7 @@ defmodule ClaperWeb.EventLive.PostComponent do
|
||||
>
|
||||
<img src="/images/icons/laugh.svg" class="h-4" />
|
||||
<%= if @post.lol_count > 0 do %>
|
||||
<span class="ml-1"><%= @post.lol_count %></span>
|
||||
<span class="ml-1">{@post.lol_count}</span>
|
||||
<% end %>
|
||||
</button>
|
||||
<% else %>
|
||||
@@ -253,7 +253,7 @@ defmodule ClaperWeb.EventLive.PostComponent do
|
||||
>
|
||||
<img src="/images/icons/laugh.svg" class="h-4" />
|
||||
<%= if @post.lol_count > 0 do %>
|
||||
<span class="ml-1"><%= @post.lol_count %></span>
|
||||
<span class="ml-1">{@post.lol_count}</span>
|
||||
<% end %>
|
||||
</button>
|
||||
<% end %>
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
>
|
||||
<div class="h-full bg-white text-black text-center flex flex-col items-center justify-center">
|
||||
<span class="font-semibold mb-10 sm:text-3xl md:text-4xl lg:text-6xl">
|
||||
<%= gettext("Scan to interact in real-time") %>
|
||||
{gettext("Scan to interact in real-time")}
|
||||
</span>
|
||||
<div
|
||||
phx-hook="QRCode"
|
||||
@@ -35,10 +35,10 @@
|
||||
>
|
||||
</div>
|
||||
<span class="font-semibold mb-10 sm:text-3xl md:text-4xl lg:text-6xl">
|
||||
<%= gettext("Or go to %{url} and use the code:", url: @host) %>
|
||||
{gettext("Or go to %{url} and use the code:", url: @host)}
|
||||
</span>
|
||||
<span class="font-semibold mb-10 sm:text-5xl md:text-6xl lg:text-8xl">
|
||||
#<%= String.upcase(@event.code) %>
|
||||
#{String.upcase(@event.code)}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -50,7 +50,7 @@
|
||||
>
|
||||
<div class="w-full md:w-1/2 mx-auto h-full">
|
||||
<p class={"#{if @iframe, do: "text-xl mb-12", else: "text-5xl mb-24"} text-white font-bold text-center"}>
|
||||
<%= @current_poll.title %>
|
||||
{@current_poll.title}
|
||||
</p>
|
||||
|
||||
<div class={"#{if @iframe, do: "space-y-5", else: "space-y-8"} flex flex-col"}>
|
||||
@@ -64,11 +64,11 @@
|
||||
</div>
|
||||
<div class="flex space-x-3 z-10 text-left">
|
||||
<span class={"#{if @iframe, do: "text-base", else: "text-2xl"} flex-1 font-bold pr-2"}>
|
||||
<%= opt.content %>
|
||||
{opt.content}
|
||||
</span>
|
||||
</div>
|
||||
<span class={"#{if @iframe, do: "text-base", else: "text-2xl"} z-10 font-bold"}>
|
||||
<%= opt.percentage %>% (<%= opt.vote_count %>)
|
||||
{opt.percentage}% ({opt.vote_count})
|
||||
</span>
|
||||
</div>
|
||||
<% end %>
|
||||
@@ -107,10 +107,10 @@
|
||||
<div class="px-4 pb-2 pt-3 rounded-b-lg rounded-tr-lg bg-white shadow-md text-black break-word mt-4">
|
||||
<%= if post.name do %>
|
||||
<p class={"#{if @iframe, do: "text-base", else: "text-lg"} text-gray-400 font-semibold mb-2 mr-2"}>
|
||||
<%= post.name %>
|
||||
{post.name}
|
||||
</p>
|
||||
<% end %>
|
||||
<p class={"#{if @iframe, do: "text-xl", else: "text-3xl"}"}><%= post.body %></p>
|
||||
<p class={"#{if @iframe, do: "text-xl", else: "text-3xl"}"}>{post.body}</p>
|
||||
|
||||
<%= if post.like_count > 0 || post.love_count > 0 || post.lol_count > 0 do %>
|
||||
<div class="flex h-6 space-x-2 text-lg text-gray-500 pb-3 items-center mt-5">
|
||||
@@ -120,7 +120,7 @@
|
||||
src="/images/icons/thumb.svg"
|
||||
class={"#{if @iframe, do: "h-4", else: "h-7"}"}
|
||||
/>
|
||||
<span class="ml-1"><%= post.like_count %></span>
|
||||
<span class="ml-1">{post.like_count}</span>
|
||||
<% end %>
|
||||
</div>
|
||||
<div class="flex items-center">
|
||||
@@ -129,7 +129,7 @@
|
||||
src="/images/icons/heart.svg"
|
||||
class={"#{if @iframe, do: "h-4", else: "h-7"}"}
|
||||
/>
|
||||
<span class="ml-1"><%= post.love_count %></span>
|
||||
<span class="ml-1">{post.love_count}</span>
|
||||
<% end %>
|
||||
</div>
|
||||
<div class="flex items-center">
|
||||
@@ -138,7 +138,7 @@
|
||||
src="/images/icons/laugh.svg"
|
||||
class={"#{if @iframe, do: "h-4", else: "h-7"}"}
|
||||
/>
|
||||
<span class="ml-1"><%= post.lol_count %></span>
|
||||
<span class="ml-1">{post.lol_count}</span>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
@@ -154,10 +154,10 @@
|
||||
<div class="px-4 pb-2 pt-3 rounded-b-lg rounded-tr-lg bg-white shadow-md text-black break-word mt-4">
|
||||
<%= if post.name do %>
|
||||
<p class={"#{if @iframe, do: "text-base", else: "text-lg"} text-gray-400 font-semibold mb-2 mr-2"}>
|
||||
<%= post.name %>
|
||||
{post.name}
|
||||
</p>
|
||||
<% end %>
|
||||
<p class={"#{if @iframe, do: "text-xl", else: "text-3xl"}"}><%= post.body %></p>
|
||||
<p class={"#{if @iframe, do: "text-xl", else: "text-3xl"}"}>{post.body}</p>
|
||||
|
||||
<%= if post.like_count > 0 || post.love_count > 0 || post.lol_count > 0 do %>
|
||||
<div class="flex h-6 space-x-2 text-lg text-gray-500 pb-3 items-center mt-5">
|
||||
@@ -167,7 +167,7 @@
|
||||
src="/images/icons/thumb.svg"
|
||||
class={"#{if @iframe, do: "h-4", else: "h-7"}"}
|
||||
/>
|
||||
<span class="ml-1"><%= post.like_count %></span>
|
||||
<span class="ml-1">{post.like_count}</span>
|
||||
<% end %>
|
||||
</div>
|
||||
<div class="flex items-center">
|
||||
@@ -176,7 +176,7 @@
|
||||
src="/images/icons/heart.svg"
|
||||
class={"#{if @iframe, do: "h-4", else: "h-7"}"}
|
||||
/>
|
||||
<span class="ml-1"><%= post.love_count %></span>
|
||||
<span class="ml-1">{post.love_count}</span>
|
||||
<% end %>
|
||||
</div>
|
||||
<div class="flex items-center">
|
||||
@@ -185,7 +185,7 @@
|
||||
src="/images/icons/laugh.svg"
|
||||
class={"#{if @iframe, do: "h-4", else: "h-7"}"}
|
||||
/>
|
||||
<span class="ml-1"><%= post.lol_count %></span>
|
||||
<span class="ml-1">{post.lol_count}</span>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
@@ -244,7 +244,7 @@
|
||||
<div class="inline-flex justify-between items-center text-white text-2xl">
|
||||
<img src="/images/icons/online-users.svg" class="h-12 mr-2" />
|
||||
<span id="counter" phx-hook="UpdateAttendees" phx-update="ignore">
|
||||
<%= @attendees_nb %>
|
||||
{@attendees_nb}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -38,7 +38,7 @@ defmodule ClaperWeb.EventLive.QuizComponent do
|
||||
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>
|
||||
<span class="font-bold"><%= gettext("See current quiz") %></span>
|
||||
<span class="font-bold">{gettext("See current quiz")}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -57,13 +57,13 @@ defmodule ClaperWeb.EventLive.QuizComponent do
|
||||
</svg>
|
||||
</div>
|
||||
|
||||
<p class="text-sm text-gray-400 my-1"><%= gettext("Current quiz") %></p>
|
||||
<p class="text-sm text-gray-400 my-1">{gettext("Current quiz")}</p>
|
||||
<%= if is_nil(@current_question) do %>
|
||||
<p class="text-white text-xl font-semibold mb-2"><%= @quiz.title %></p>
|
||||
<p class="text-white text-xl font-semibold mb-2">{@quiz.title}</p>
|
||||
<% else %>
|
||||
<p class="text-white text-xl font-semibold mb-2"><%= @current_question.content %></p>
|
||||
<p class="text-white text-xl font-semibold mb-2">{@current_question.content}</p>
|
||||
<p class="text-gray-400 text-sm mb-4">
|
||||
<%= @current_quiz_question_idx + 1 %>/<%= length(@quiz.quiz_questions) %>
|
||||
{@current_quiz_question_idx + 1}/{length(@quiz.quiz_questions)}
|
||||
</p>
|
||||
<% end %>
|
||||
</div>
|
||||
@@ -81,10 +81,10 @@ defmodule ClaperWeb.EventLive.QuizComponent do
|
||||
<div class="h-5 w-5 mt-0.5 rounded-md point-select border-2 border-white">
|
||||
</div>
|
||||
<% end %>
|
||||
<span class="flex-1 pr-2"><%= opt.content %></span>
|
||||
<span class="flex-1 pr-2">{opt.content}</span>
|
||||
</div>
|
||||
|
||||
<span class="text-sm"><%= opt.percentage %>% (<%= opt.response_count %>)</span>
|
||||
<span class="text-sm">{opt.percentage}% ({opt.response_count})</span>
|
||||
</div>
|
||||
</div>
|
||||
<% else %>
|
||||
@@ -102,7 +102,7 @@ defmodule ClaperWeb.EventLive.QuizComponent do
|
||||
<span class="h-5 w-5 mt-0.5 rounded-md point-select border-2 border-white">
|
||||
</span>
|
||||
<% end %>
|
||||
<span class="flex-1 pr-2"><%= opt.content %></span>
|
||||
<span class="flex-1 pr-2">{opt.content}</span>
|
||||
</div>
|
||||
</button>
|
||||
<% end %>
|
||||
@@ -110,18 +110,18 @@ defmodule ClaperWeb.EventLive.QuizComponent do
|
||||
<% else %>
|
||||
<div class="text-gray-400 flex flex-col items-center justify-center font-semibold text-lg mt-4">
|
||||
<%= if @quiz.show_results do %>
|
||||
<p><%= gettext("Your score") %></p>
|
||||
<p>{gettext("Your score")}</p>
|
||||
<p class="text-6xl font-bold mt-2">
|
||||
<%= elem(@quiz_score, 0) %>/<%= elem(@quiz_score, 1) %>
|
||||
{elem(@quiz_score, 0)}/{elem(@quiz_score, 1)}
|
||||
</p>
|
||||
<button
|
||||
phx-click="show-quiz-results"
|
||||
class="mt-7 px-3 py-2 text-white font-medium bg-primary-400 hover:bg-primary-500 rounded-md mt-3 mb-4"
|
||||
>
|
||||
<%= gettext("Show results") %>
|
||||
{gettext("Show results")}
|
||||
</button>
|
||||
<% else %>
|
||||
<p><%= gettext("Waiting for results...") %></p>
|
||||
<p>{gettext("Waiting for results...")}</p>
|
||||
<svg
|
||||
class="w-32 h-32 mt-4"
|
||||
viewBox="0 0 360 360"
|
||||
@@ -148,7 +148,7 @@ defmodule ClaperWeb.EventLive.QuizComponent do
|
||||
<div :if={not @is_submitted} class="flex justify-between items-baseline w-full h-12 mt-5">
|
||||
<%= if @current_quiz_question_idx > 0 do %>
|
||||
<button phx-click="prev-question" class="px-3 py-2 text-white font-medium">
|
||||
<%= gettext("Back") %>
|
||||
{gettext("Back")}
|
||||
</button>
|
||||
<% end %>
|
||||
|
||||
@@ -158,21 +158,21 @@ defmodule ClaperWeb.EventLive.QuizComponent do
|
||||
class={"px-3 py-2 text-white font-medium rounded-md h-full #{if @has_selection, do: "bg-primary-400 hover:bg-primary-500", else: "bg-gray-500 cursor-not-allowed"}"}
|
||||
disabled={not @has_selection}
|
||||
>
|
||||
<%= gettext("Next") %>
|
||||
{gettext("Next")}
|
||||
</button>
|
||||
<% else %>
|
||||
<%= if is_nil(@current_user) && !@quiz.allow_anonymous do %>
|
||||
<div class="w-full flex items-center justify-between">
|
||||
<div class="text-white text-sm font-semibold">
|
||||
<%= gettext("Please sign in to submit your answers") %>
|
||||
{gettext("Please sign in to submit your answers")}
|
||||
</div>
|
||||
<%= link(
|
||||
{link(
|
||||
gettext("Sign in"),
|
||||
target: "_blank",
|
||||
to: ~p"/users/log_in",
|
||||
class:
|
||||
"inline px-3 py-2 text-white font-medium rounded-md h-full bg-primary-400 hover:bg-primary-500"
|
||||
) %>
|
||||
)}
|
||||
</div>
|
||||
<% else %>
|
||||
<button
|
||||
@@ -180,7 +180,7 @@ defmodule ClaperWeb.EventLive.QuizComponent do
|
||||
class={"px-3 py-2 text-white font-medium rounded-md h-full #{if @has_selection, do: "bg-primary-400 hover:bg-primary-500", else: "bg-gray-500 cursor-not-allowed"}"}
|
||||
disabled={not @has_selection}
|
||||
>
|
||||
<%= gettext("Submit") %>
|
||||
{gettext("Submit")}
|
||||
</button>
|
||||
<% end %>
|
||||
<% end %>
|
||||
@@ -195,7 +195,7 @@ defmodule ClaperWeb.EventLive.QuizComponent do
|
||||
>
|
||||
<%= if (@current_quiz_question_idx > 0 && @current_quiz_question_idx <= length(@quiz.quiz_questions) - 1) do %>
|
||||
<button phx-click="prev-question" class="px-3 py-2 text-white font-medium">
|
||||
<%= gettext("Back") %>
|
||||
{gettext("Back")}
|
||||
</button>
|
||||
<% else %>
|
||||
<div class="w-1/2"></div>
|
||||
@@ -206,7 +206,7 @@ defmodule ClaperWeb.EventLive.QuizComponent do
|
||||
phx-click="next-question"
|
||||
class="px-3 py-2 text-white font-medium bg-primary-400 hover:bg-primary-500 rounded-md h-full"
|
||||
>
|
||||
<%= gettext("Next") %>
|
||||
{gettext("Next")}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<div>
|
||||
<img src="/images/logo-large-black.svg" class="h-16 my-3" />
|
||||
|
||||
<span class="font-bold text-xl"><%= @event.name %></span>
|
||||
<span class="font-bold text-xl">{@event.name}</span>
|
||||
</div>
|
||||
|
||||
<a
|
||||
@@ -23,7 +23,7 @@
|
||||
href={~p"/?disconnected_from=#{@event.uuid}"}
|
||||
>
|
||||
<img src="/images/icons/exit-outline.svg" class="h-5 mr-3" />
|
||||
<span><%= gettext("Leave") %></span>
|
||||
<span>{gettext("Leave")}</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -35,7 +35,7 @@
|
||||
>
|
||||
<div id="banner" class="hidden w-full bg-gray-800 text-center" phx-hook="EmbeddedBanner">
|
||||
<a href="https://claper.co" target="_blank" class="text-xs text-white py-3 w-full">
|
||||
<%= gettext("Create your next presentation with") %>
|
||||
{gettext("Create your next presentation with")}
|
||||
<span class="underline">Claper</span>
|
||||
</a>
|
||||
</div>
|
||||
@@ -45,13 +45,13 @@
|
||||
class="bg-black rounded-full text-sm px-3 py-1 bg-gradient-to-tl from-primary-500 to-secondary-500 bg-size-200 bg-pos-0 text-white uppercase flex items-center"
|
||||
>
|
||||
<img src="/images/icons/menu-outline.svg" class="h-6" />
|
||||
<span class="ml-1">#<%= @event.code %></span>
|
||||
<span class="ml-1">#{@event.code}</span>
|
||||
</button>
|
||||
|
||||
<div class="inline-flex justify-between items-center text-white text-sm">
|
||||
<img src="/images/icons/online-users.svg" class="h-6 mr-2" />
|
||||
<span id="counter" phx-update="ignore" phx-hook="UpdateAttendees">
|
||||
<%= @attendees_nb %>
|
||||
{@attendees_nb}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -162,7 +162,7 @@
|
||||
|
||||
<%= if @post_count == 0 && @state.chat_enabled do %>
|
||||
<div class="text-2xl text-white block fixed bottom-32 left-0 w-full lg:w-1/3 lg:left-1/2 lg:transform lg:-translate-x-1/2 text-center opacity-30">
|
||||
<span><%= gettext("Be the first to react !") %></span>
|
||||
<span>{gettext("Be the first to react !")}</span>
|
||||
<img src="/images/icons/arrow-white.svg" class="h-24 rotate-180 ml-12 mt-8" />
|
||||
</div>
|
||||
<% end %>
|
||||
@@ -205,7 +205,7 @@
|
||||
<path d="M17 17m-3 0a3 3 0 1 0 6 0a3 3 0 1 0 -6 0"></path>
|
||||
<path d="M10 17h4"></path>
|
||||
</svg>
|
||||
<span><%= gettext("Anonymous") %></span>
|
||||
<span>{gettext("Anonymous")}</span>
|
||||
</button>
|
||||
<% else %>
|
||||
<button class="w-full bg-gray-900 opacity-50 text-left text-white px-3 py-2 rounded-md flex space-x-2 items-center cursor-default">
|
||||
@@ -226,7 +226,7 @@
|
||||
<path d="M17 17m-3 0a3 3 0 1 0 6 0a3 3 0 1 0 -6 0"></path>
|
||||
<path d="M10 17h4"></path>
|
||||
</svg>
|
||||
<span><%= gettext("Anonymous") %> (<%= gettext("disabled") %>)</span>
|
||||
<span>{gettext("Anonymous")} ({gettext("disabled")})</span>
|
||||
</button>
|
||||
<% end %>
|
||||
|
||||
@@ -246,13 +246,13 @@
|
||||
<path d="M5.433 13.917l1.262-3.155A4 4 0 017.58 9.42l6.92-6.918a2.121 2.121 0 013 3l-6.92 6.918c-.383.383-.84.685-1.343.886l-3.154 1.262a.5.5 0 01-.65-.65z" />
|
||||
<path d="M3.5 5.75c0-.69.56-1.25 1.25-1.25H10A.75.75 0 0010 3H4.75A2.75 2.75 0 002 5.75v9.5A2.75 2.75 0 004.75 18h9.5A2.75 2.75 0 0017 15.25V10a.75.75 0 00-1.5 0v5.25c0 .69-.56 1.25-1.25 1.25h-9.5c-.69 0-1.25-.56-1.25-1.25v-9.5z" />
|
||||
</svg>
|
||||
<span><%= gettext("Use your name") %></span>
|
||||
<span>{gettext("Use your name")}</span>
|
||||
</button>
|
||||
<button
|
||||
phx-click={toggle_nickname_popup()}
|
||||
class="w-full text-left text-primary-500 text-sm px-3 py-0 rounded-md"
|
||||
>
|
||||
<%= gettext("Close") %>
|
||||
{gettext("Close")}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
@@ -275,15 +275,15 @@
|
||||
backdrop-filter: blur(11.5px);
|
||||
-webkit-backdrop-filter: blur(11.5px);"
|
||||
>
|
||||
<%= text_input(f, :name,
|
||||
{text_input(f, :name,
|
||||
class:
|
||||
"bg-transparent outline-none w-full text-white h-10 placeholder-white resize-none pr-20 leading-4 overflow-y-hidden focus:overflow-y-auto",
|
||||
placeholder: gettext("Enter your name")
|
||||
) %>
|
||||
)}
|
||||
<p class="font-semibold text-sm">
|
||||
<%= error_tag(f, :name) %>
|
||||
{error_tag(f, :name)}
|
||||
</p>
|
||||
<%= submit(gettext("Join"), class: "absolute right-5 top-2 p-2 bg-white rounded-md") %>
|
||||
{submit(gettext("Join"), class: "absolute right-5 top-2 p-2 bg-white rounded-md")}
|
||||
</div>
|
||||
</.form>
|
||||
<% else %>
|
||||
@@ -326,9 +326,9 @@
|
||||
/>
|
||||
</svg>
|
||||
<%= if @nickname && @nickname == "" do %>
|
||||
<span><%= gettext("Anonymous") %></span>
|
||||
<span>{gettext("Anonymous")}</span>
|
||||
<% else %>
|
||||
<span><%= @nickname %></span>
|
||||
<span>{@nickname}</span>
|
||||
<% end %>
|
||||
</a>
|
||||
</div>
|
||||
@@ -338,15 +338,15 @@
|
||||
</button>
|
||||
|
||||
<div class="flex space-x-2 items-center">
|
||||
<%= textarea(f, :body,
|
||||
{textarea(f, :body,
|
||||
id: "postFormTA",
|
||||
class:
|
||||
"bg-transparent outline-none w-full text-white h-10 placeholder-white pt-3 resize-none pr-20 leading-4 overflow-y-hidden focus:overflow-y-auto",
|
||||
placeholder: gettext("Ask, comment...")
|
||||
) %>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
<%= submit("Save", phx_disable_with: "Saving...", id: "hiddenSubmit", class: "hidden") %>
|
||||
{submit("Save", phx_disable_with: "Saving...", id: "hiddenSubmit", class: "hidden")}
|
||||
</.form>
|
||||
<% end %>
|
||||
<% else %>
|
||||
@@ -362,7 +362,7 @@
|
||||
>
|
||||
<div class="flex space-x-2 items-center">
|
||||
<div class="opacity-50 bg-transparent outline-none w-full text-white h-10 placeholder-white pt-3 resize-none pr-20 leading-4 overflow-y-hidden focus:overflow-y-auto">
|
||||
<%= gettext("Messages deactivated") %>
|
||||
{gettext("Messages deactivated")}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -420,7 +420,7 @@
|
||||
<div class="flex bg-black h-screen">
|
||||
<div class="flex items-center text-center lg:text-left justify-center lg:justify-start lg:px-12 w-full lg:w-1/2">
|
||||
<div class="w-full mx-12 lg:w-auto lg:mx-0">
|
||||
<h1 class="py-5 text-5xl font-semibold text-white md:text-6xl"><%= @event.name %></h1>
|
||||
<h1 class="py-5 text-5xl font-semibold text-white md:text-6xl">{@event.name}</h1>
|
||||
|
||||
<h2
|
||||
x-data={"{date: moment.utc('#{@event.started_at}').local().format('LLLL')}"}
|
||||
@@ -432,27 +432,27 @@
|
||||
<div class="text-white flex justify-between items-center mt-12">
|
||||
<div class="flex flex-col items-center mr-10">
|
||||
<span class="text-5xl font-bold">
|
||||
<%= if @remaining_days < 10, do: "0" %><%= @remaining_days %>
|
||||
{if @remaining_days < 10, do: "0"}{@remaining_days}
|
||||
</span>
|
||||
<span class="text-gray-400"><%= gettext("days") %></span>
|
||||
<span class="text-gray-400">{gettext("days")}</span>
|
||||
</div>
|
||||
<div class="flex flex-col items-center mr-10">
|
||||
<span class="text-5xl font-bold">
|
||||
<%= if @remaining_hours < 10, do: "0" %><%= @remaining_hours %>
|
||||
{if @remaining_hours < 10, do: "0"}{@remaining_hours}
|
||||
</span>
|
||||
<span class="text-gray-400"><%= gettext("hours") %></span>
|
||||
<span class="text-gray-400">{gettext("hours")}</span>
|
||||
</div>
|
||||
<div class="flex flex-col items-center mr-10">
|
||||
<span class="text-5xl font-bold">
|
||||
<%= if @remaining_minutes < 10, do: "0" %><%= @remaining_minutes %>
|
||||
{if @remaining_minutes < 10, do: "0"}{@remaining_minutes}
|
||||
</span>
|
||||
<span class="text-gray-400"><%= gettext("minutes") %></span>
|
||||
<span class="text-gray-400">{gettext("minutes")}</span>
|
||||
</div>
|
||||
<div class="flex flex-col items-center">
|
||||
<span class="text-5xl font-bold">
|
||||
<%= if @remaining_seconds < 10, do: "0" %><%= @remaining_seconds %>
|
||||
{if @remaining_seconds < 10, do: "0"}{@remaining_seconds}
|
||||
</span>
|
||||
<span class="text-gray-400"><%= gettext("seconds") %></span>
|
||||
<span class="text-gray-400">{gettext("seconds")}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -461,7 +461,7 @@
|
||||
<div class="h-full object-cover bg-gradient-animate">
|
||||
<div class="h-full bg-black text-white bg-opacity-50 text-center flex flex-col items-center justify-center">
|
||||
<span class="text-4xl font-semibold mb-10">
|
||||
<%= gettext("Scan to interact in real-time") %>
|
||||
{gettext("Scan to interact in real-time")}
|
||||
</span>
|
||||
<div
|
||||
phx-hook="QRCode"
|
||||
@@ -470,8 +470,8 @@
|
||||
class="rounded-lg mx-auto bg-black h-64 w-64 p-12 flex items-center justify-center mb-14"
|
||||
>
|
||||
</div>
|
||||
<span class="text-4xl font-semibold mb-10"><%= gettext("Or use the code:") %></span>
|
||||
<span class="text-5xl font-semibold mb-10">#<%= String.upcase(@event.code) %></span>
|
||||
<span class="text-4xl font-semibold mb-10">{gettext("Or use the code:")}</span>
|
||||
<span class="text-5xl font-semibold mb-10">#{String.upcase(@event.code)}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -94,13 +94,13 @@
|
||||
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
|
||||
{case @live_action do
|
||||
:new -> gettext("Create")
|
||||
:edit -> gettext("Save")
|
||||
end %>
|
||||
end}
|
||||
</button>
|
||||
<%= if @live_action == :edit do %>
|
||||
<%= link(gettext("Delete"),
|
||||
{link(gettext("Delete"),
|
||||
to: "#",
|
||||
phx_click: "delete",
|
||||
phx_target: @myself,
|
||||
@@ -113,7 +113,7 @@
|
||||
],
|
||||
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>
|
||||
|
||||
@@ -15,7 +15,6 @@ defmodule ClaperWeb.ModalComponent do
|
||||
phx-window-keydown={hide_modal()}
|
||||
phx-key="escape"
|
||||
phx-target={@myself}
|
||||
phx-page-loading
|
||||
>
|
||||
<div class="flex items-center justify-center pt-4 px-4 pb-20 text-center sm:block sm:p-4">
|
||||
<div
|
||||
@@ -36,16 +35,16 @@ defmodule ClaperWeb.ModalComponent do
|
||||
</div>
|
||||
|
||||
<h3 class="text-lg leading-6 font-medium text-gray-900">
|
||||
<%= @title %>
|
||||
{@title}
|
||||
</h3>
|
||||
<div class="mt-2 max-w-xl text-sm text-gray-500">
|
||||
<p>
|
||||
<%= @description %>
|
||||
{@description}
|
||||
</p>
|
||||
</div>
|
||||
<div class="mt-2">
|
||||
<p class="text-sm text-gray-500">
|
||||
<%= render_slot(@inner_block) %>
|
||||
{render_slot(@inner_block)}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -64,6 +63,6 @@ defmodule ClaperWeb.ModalComponent do
|
||||
def hide_modal(js \\ %JS{}) do
|
||||
js
|
||||
|> JS.hide(to: "#modal", transition: "animate__animated animate__fadeOut", time: 300)
|
||||
|> JS.push("hide", target: "#modal")
|
||||
|> JS.push("hide", target: "#modal", page_loading: true)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -79,21 +79,21 @@
|
||||
</svg>
|
||||
</button>
|
||||
|
||||
<p class="text-gray-700 text-xl font-semibold"><%= gettext("Options") %></p>
|
||||
<p class="text-gray-700 text-xl font-semibold">{gettext("Options")}</p>
|
||||
|
||||
<div class="flex gap-x-2 mb-5 mt-3">
|
||||
<%= checkbox(f, :show_results, class: "h-4 w-4") %>
|
||||
<%= label(
|
||||
{checkbox(f, :show_results, class: "h-4 w-4")}
|
||||
{label(
|
||||
f,
|
||||
:show_results,
|
||||
gettext("Attendees can see the results on their device"),
|
||||
class: "text-sm font-medium"
|
||||
) %>
|
||||
)}
|
||||
</div>
|
||||
|
||||
<div class="flex gap-x-2 mb-5">
|
||||
<%= checkbox(f, :multiple, class: "h-4 w-4") %>
|
||||
<%= label(f, :multiple, gettext("Multiple answers"), class: "text-sm font-medium") %>
|
||||
{checkbox(f, :multiple, class: "h-4 w-4")}
|
||||
{label(f, :multiple, gettext("Multiple answers"), class: "text-sm font-medium")}
|
||||
</div>
|
||||
|
||||
<div class="flex space-x-3">
|
||||
@@ -102,13 +102,13 @@
|
||||
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
|
||||
{case @live_action do
|
||||
:new -> gettext("Create")
|
||||
:edit -> gettext("Save")
|
||||
end %>
|
||||
end}
|
||||
</button>
|
||||
<%= if @live_action == :edit do %>
|
||||
<%= link(gettext("Delete"),
|
||||
{link(gettext("Delete"),
|
||||
to: "#",
|
||||
phx_click: "delete",
|
||||
phx_target: @myself,
|
||||
@@ -121,7 +121,7 @@
|
||||
],
|
||||
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>
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
if(i == 0, do: "rounded-tl-md")
|
||||
]}
|
||||
>
|
||||
<%= i + 1 %>
|
||||
{i + 1}
|
||||
</button>
|
||||
<% end %>
|
||||
<%= if Ecto.Changeset.get_field(@changeset, :quiz_questions) |> length() < 10 do %>
|
||||
@@ -43,7 +43,7 @@
|
||||
class="text-xs px-3"
|
||||
phx-target={@myself}
|
||||
>
|
||||
+ <%= gettext("Add Question") %>
|
||||
+ {gettext("Add Question")}
|
||||
</button>
|
||||
<% end %>
|
||||
</div>
|
||||
@@ -67,7 +67,7 @@
|
||||
|
||||
<%= if Keyword.has_key?(q.errors, :quiz_question_opts) do %>
|
||||
<p class="text-supporting-red-500 text-sm my-2">
|
||||
<%= elem(Keyword.get(q.errors, :quiz_question_opts), 0) %>
|
||||
{elem(Keyword.get(q.errors, :quiz_question_opts), 0)}
|
||||
</p>
|
||||
<% end %>
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
</div>
|
||||
<div>
|
||||
<%= label(class: "mt-6 cursor-pointer flex items-center text-white rounded-md px-2.5 py-2.5 h-full #{if (o.source.changes[:is_correct] != nil && o.source.changes[:is_correct]) || (!Map.has_key?(o.source.changes, :is_correct) && o.source.data.is_correct), do: "bg-green-500", else: "bg-red-500"}") do %>
|
||||
<%= checkbox(o, :is_correct, class: "hidden") %>
|
||||
{checkbox(o, :is_correct, class: "hidden")}
|
||||
<%= if (o.source.changes[:is_correct] != nil && o.source.changes[:is_correct]) || (!Map.has_key?(o.source.changes, :is_correct) && o.source.data.is_correct) do %>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
@@ -126,7 +126,7 @@
|
||||
<%= if o.index > 1 do %>
|
||||
<label>
|
||||
<div class="cursor-pointer mt-1 text-xs font-semibold text-red-600">
|
||||
<%= gettext("Delete") %>
|
||||
{gettext("Delete")}
|
||||
</div>
|
||||
<input
|
||||
type="checkbox"
|
||||
@@ -149,13 +149,13 @@
|
||||
phx-target={@myself}
|
||||
class="mt-5 text-xs text-gray-700"
|
||||
>
|
||||
+ <%= gettext("Add answer") %>
|
||||
+ {gettext("Add answer")}
|
||||
</button>
|
||||
|
||||
<%= if Ecto.Changeset.get_field(@changeset, :quiz_questions) |> length() > 1 do %>
|
||||
<label phx-click="remove_quiz_question" phx-target={@myself}>
|
||||
<div class="cursor-pointer mt-4 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">
|
||||
<%= gettext("Remove question") %>
|
||||
{gettext("Remove question")}
|
||||
</div>
|
||||
<input
|
||||
type="checkbox"
|
||||
@@ -169,16 +169,16 @@
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<p class="text-gray-700 text-xl font-semibold"><%= gettext("Options") %></p>
|
||||
<p class="text-gray-700 text-xl font-semibold">{gettext("Options")}</p>
|
||||
|
||||
<div class="flex gap-x-2 mb-5 mt-3">
|
||||
<%= checkbox(f, :allow_anonymous, class: "h-4 w-4") %>
|
||||
<%= label(
|
||||
{checkbox(f, :allow_anonymous, class: "h-4 w-4")}
|
||||
{label(
|
||||
f,
|
||||
:allow_anonymous,
|
||||
gettext("Allow anonymous submissions"),
|
||||
class: "text-sm font-medium"
|
||||
) %>
|
||||
)}
|
||||
</div>
|
||||
|
||||
<div class="flex justify-between items-center">
|
||||
@@ -189,14 +189,14 @@
|
||||
disabled={!@changeset.valid?}
|
||||
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 disabled:opacity-50 disabled:cursor-not-allowed"
|
||||
>
|
||||
<%= case @live_action do
|
||||
{case @live_action do
|
||||
:new -> gettext("Create")
|
||||
:edit -> gettext("Save")
|
||||
end %>
|
||||
end}
|
||||
</button>
|
||||
|
||||
<%= if @live_action == :edit do %>
|
||||
<%= link(gettext("Delete"),
|
||||
{link(gettext("Delete"),
|
||||
to: "#",
|
||||
phx_click: "delete",
|
||||
phx_target: @myself,
|
||||
@@ -209,13 +209,13 @@
|
||||
],
|
||||
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>
|
||||
|
||||
<%= if @live_action == :edit do %>
|
||||
<%= link to: ~p"/export/quizzes/#{@quiz.id}/qti", class: "text-xs text-primary-500 font-medium flex items-center gap-1", method: :post, target: "_blank" do %>
|
||||
<%= gettext("Export to QTI (XML)") %>
|
||||
{gettext("Export to QTI (XML)")}
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<div class="border-b border-gray-200 py-4 flex flex-col sm:flex-row sm:items-center justify-between">
|
||||
<div class="flex-1 min-w-0">
|
||||
<h1 class="text-2xl font-medium leading-6 text-gray-900 sm:truncate">
|
||||
<%= @page_title %>
|
||||
{@page_title}
|
||||
</h1>
|
||||
</div>
|
||||
<div class="flex mt-4 space-x-5 sm:mt-0 hidden">
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
<div class="mt-12 mb-3">
|
||||
<h3 class="text-lg leading-6 font-medium text-gray-900">
|
||||
<%= gettext("Event") %>: <%= @event.name %> (#<%= @event.code %>)
|
||||
{gettext("Event")}: {@event.name} (#{@event.code})
|
||||
</h3>
|
||||
|
||||
<dl class="mt-5 grid grid-cols-1 gap-5 sm:grid-cols-2 lg:grid-cols-4">
|
||||
@@ -35,14 +35,14 @@
|
||||
</svg>
|
||||
</div>
|
||||
<p class="ml-16 text-sm font-medium text-gray-500 truncate">
|
||||
<%= gettext("Audience peak") %>
|
||||
{gettext("Audience peak")}
|
||||
</p>
|
||||
</dt>
|
||||
<dd class="ml-16 flex items-baseline">
|
||||
<p class="text-2xl font-semibold text-gray-900">
|
||||
<%= @event.audience_peak %>
|
||||
{@event.audience_peak}
|
||||
<span class="text-xs text-gray-500 font-normal">
|
||||
<%= ngettext("attendee", "attendees", @event.audience_peak) %>
|
||||
{ngettext("attendee", "attendees", @event.audience_peak)}
|
||||
</span>
|
||||
</p>
|
||||
</dd>
|
||||
@@ -67,14 +67,14 @@
|
||||
</svg>
|
||||
</div>
|
||||
<p class="ml-16 text-sm font-medium text-gray-500 truncate">
|
||||
<%= gettext("Unique attendees") %>
|
||||
{gettext("Unique attendees")}
|
||||
</p>
|
||||
</dt>
|
||||
<dd class="ml-16 flex items-baseline">
|
||||
<p class="text-2xl font-semibold text-gray-900">
|
||||
<%= @distinct_attendee_count %>
|
||||
{@distinct_attendee_count}
|
||||
<span class="text-xs text-gray-500 font-normal">
|
||||
<%= ngettext("attendee", "attendees", @distinct_attendee_count) %>
|
||||
{ngettext("attendee", "attendees", @distinct_attendee_count)}
|
||||
</span>
|
||||
</p>
|
||||
</dd>
|
||||
@@ -99,18 +99,18 @@
|
||||
</svg>
|
||||
</div>
|
||||
<p class="ml-16 text-sm font-medium text-gray-500 truncate">
|
||||
<%= gettext("Messages") %>
|
||||
{gettext("Messages")}
|
||||
</p>
|
||||
</dt>
|
||||
<dd class="ml-16 flex items-baseline">
|
||||
<p class="text-2xl font-semibold text-gray-900">
|
||||
<%= length(@posts) %>
|
||||
{length(@posts)}
|
||||
<span class="text-xs text-gray-500 font-normal">
|
||||
<%= ngettext(
|
||||
{ngettext(
|
||||
"from %{count} people",
|
||||
"from %{count} peoples",
|
||||
@distinct_poster_count
|
||||
) %>
|
||||
)}
|
||||
</span>
|
||||
</p>
|
||||
</dd>
|
||||
@@ -136,11 +136,11 @@
|
||||
</svg>
|
||||
</div>
|
||||
<p class="ml-16 text-sm font-medium truncate text-gray-500">
|
||||
<%= gettext("Engagement rate") %>
|
||||
{gettext("Engagement rate")}
|
||||
</p>
|
||||
</dt>
|
||||
<dd class="ml-16 flex items-baseline flex items-center">
|
||||
<p class="text-2xl font-semibold text-gray-900"><%= @engagement_rate %>%</p>
|
||||
<p class="text-2xl font-semibold text-gray-900">{@engagement_rate}%</p>
|
||||
<a
|
||||
href="https://docs.claper.co/usage/reports.html#metrics"
|
||||
target="_blank"
|
||||
@@ -167,7 +167,7 @@
|
||||
|
||||
<div class="pt-5 pb-5">
|
||||
<h3 class="text-lg leading-6 font-medium text-gray-900 mb-4">
|
||||
<%= gettext("Interactions") %>
|
||||
{gettext("Interactions")}
|
||||
</h3>
|
||||
|
||||
<div class="border-b border-gray-200">
|
||||
@@ -177,35 +177,35 @@
|
||||
phx-value-tab="messages"
|
||||
class={"whitespace-nowrap py-4 px-1 border-b-2 font-medium text-sm #{if @current_tab == :messages, do: "border-primary-500 text-primary-600", else: "border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300"}"}
|
||||
>
|
||||
<%= gettext("Messages") %>
|
||||
{gettext("Messages")}
|
||||
</button>
|
||||
<button
|
||||
phx-click="change_tab"
|
||||
phx-value-tab="polls"
|
||||
class={"whitespace-nowrap py-4 px-1 border-b-2 font-medium text-sm #{if @current_tab == :polls, do: "border-primary-500 text-primary-600", else: "border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300"}"}
|
||||
>
|
||||
<%= gettext("Polls") %>
|
||||
{gettext("Polls")}
|
||||
</button>
|
||||
<button
|
||||
phx-click="change_tab"
|
||||
phx-value-tab="forms"
|
||||
class={"whitespace-nowrap py-4 px-1 border-b-2 font-medium text-sm #{if @current_tab == :forms, do: "border-primary-500 text-primary-600", else: "border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300"}"}
|
||||
>
|
||||
<%= gettext("Forms") %>
|
||||
{gettext("Forms")}
|
||||
</button>
|
||||
<button
|
||||
phx-click="change_tab"
|
||||
phx-value-tab="web_content"
|
||||
class={"whitespace-nowrap py-4 px-1 border-b-2 font-medium text-sm #{if @current_tab == :web_content, do: "border-primary-500 text-primary-600", else: "border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300"}"}
|
||||
>
|
||||
<%= gettext("Web Content") %>
|
||||
{gettext("Web Content")}
|
||||
</button>
|
||||
<button
|
||||
phx-click="change_tab"
|
||||
phx-value-tab="quizzes"
|
||||
class={"whitespace-nowrap py-4 px-1 border-b-2 font-medium text-sm #{if @current_tab == :quizzes, do: "border-primary-500 text-primary-600", else: "border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300"}"}
|
||||
>
|
||||
<%= gettext("Quizzes") %>
|
||||
{gettext("Quizzes")}
|
||||
</button>
|
||||
</nav>
|
||||
</div>
|
||||
@@ -219,7 +219,7 @@
|
||||
<% total = Enum.map(poll.poll_opts, fn e -> e.vote_count end) |> Enum.sum() %>
|
||||
<div class="bg-gray-900 w-full p-6 my-5 text-black shadow-lg rounded-md">
|
||||
<div class="w-full h-full flex items-center justify-between mb-4">
|
||||
<p class="text-white text-xl font-semibold"><%= poll.title %></p>
|
||||
<p class="text-white text-xl font-semibold">{poll.title}</p>
|
||||
<%= link to: ~p"/export/polls/#{poll.id}", class: "text-sm text-white bg-primary-500 hover:bg-primary-600 rounded-md px-3 py-1 flex items-center gap-1", method: :post, target: "_blank" do %>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
@@ -233,7 +233,7 @@
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" /><path d="M14 3v4a1 1 0 0 0 1 1h4" /><path d="M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2z" /><path d="M9 15h6" /><path d="M12.5 17.5l2.5 -2.5l-2.5 -2.5" />
|
||||
</svg>
|
||||
<span><%= gettext("Export") %> (CSV)</span>
|
||||
<span>{gettext("Export")} (CSV)</span>
|
||||
<% end %>
|
||||
</div>
|
||||
<div>
|
||||
@@ -256,10 +256,10 @@
|
||||
>
|
||||
</div>
|
||||
<div class="flex space-x-3 items-center z-10 text-left">
|
||||
<span class="flex-1 pr-2"><%= opt.content %></span>
|
||||
<span class="flex-1 pr-2">{opt.content}</span>
|
||||
</div>
|
||||
<span class="text-sm z-10">
|
||||
<%= percentage %>% (<%= opt.vote_count %>)
|
||||
{percentage}% ({opt.vote_count})
|
||||
</span>
|
||||
</div>
|
||||
<% end %>
|
||||
@@ -269,7 +269,7 @@
|
||||
</div>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<p class="italic text-gray-500"><%= gettext("No poll has been created") %></p>
|
||||
<p class="italic text-gray-500">{gettext("No poll has been created")}</p>
|
||||
<% end %>
|
||||
</div>
|
||||
<% :forms -> %>
|
||||
@@ -278,7 +278,7 @@
|
||||
<%= for form <- @event.presentation_file.forms do %>
|
||||
<div class="flex justify-between items-center mb-5">
|
||||
<span class="text-xl font-semibold text-gray-900">
|
||||
<%= form.title %>
|
||||
{form.title}
|
||||
</span>
|
||||
|
||||
<%= if length(form.form_submits) > 0 do %>
|
||||
@@ -295,14 +295,14 @@
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" /><path d="M14 3v4a1 1 0 0 0 1 1h4" /><path d="M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2z" /><path d="M9 15h6" /><path d="M12.5 17.5l2.5 -2.5l-2.5 -2.5" />
|
||||
</svg>
|
||||
<span><%= gettext("Export") %> (CSV)</span>
|
||||
<span>{gettext("Export")} (CSV)</span>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<%= if length(form.form_submits) == 0 do %>
|
||||
<p class="italic text-gray-500">
|
||||
<%= gettext("No form submission has been sent") %>
|
||||
{gettext("No form submission has been sent")}
|
||||
</p>
|
||||
<% end %>
|
||||
|
||||
@@ -325,7 +325,7 @@
|
||||
|
||||
<div>
|
||||
<%= for res <- fs.response do %>
|
||||
<p><strong><%= elem(res, 0) %>:</strong> <%= elem(res, 1) %></p>
|
||||
<p><strong>{elem(res, 0)}:</strong> {elem(res, 1)}</p>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
@@ -335,7 +335,7 @@
|
||||
</div>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<p class="italic text-gray-500"><%= gettext("No form has been created") %></p>
|
||||
<p class="italic text-gray-500">{gettext("No form has been created")}</p>
|
||||
<% end %>
|
||||
</div>
|
||||
<% :web_content -> %>
|
||||
@@ -343,7 +343,7 @@
|
||||
<%= if length(@event.presentation_file.embeds) > 0 do %>
|
||||
<%= for embed <- @event.presentation_file.embeds do %>
|
||||
<span class="text-xl font-semibold text-gray-900 mb-4">
|
||||
<%= embed.title %>
|
||||
{embed.title}
|
||||
</span>
|
||||
<div class="text-black break-all mt-4 mb-10">
|
||||
<.live_component
|
||||
@@ -356,7 +356,7 @@
|
||||
<% end %>
|
||||
<% else %>
|
||||
<p class="italic text-gray-500">
|
||||
<%= gettext("No web content has been created") %>
|
||||
{gettext("No web content has been created")}
|
||||
</p>
|
||||
<% end %>
|
||||
</div>
|
||||
@@ -377,13 +377,13 @@
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" /><path d="M14 3v4a1 1 0 0 0 1 1h4" /><path d="M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2z" /><path d="M9 15h6" /><path d="M12.5 17.5l2.5 -2.5l-2.5 -2.5" />
|
||||
</svg>
|
||||
<span><%= gettext("Export") %> (CSV)</span>
|
||||
<span>{gettext("Export")} (CSV)</span>
|
||||
<% end %>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<%= if length(@posts) == 0 do %>
|
||||
<p class="italic text-gray-500"><%= gettext("No messages has been sent") %></p>
|
||||
<p class="italic text-gray-500">{gettext("No messages has been sent")}</p>
|
||||
<% end %>
|
||||
|
||||
<div>
|
||||
@@ -405,7 +405,7 @@
|
||||
<div class="bg-gray-900 w-full p-4 text-black shadow-lg rounded-md mb-10">
|
||||
<div class="mb-4">
|
||||
<div class="w-full flex items-center justify-between">
|
||||
<p class="text-white text-xl font-semibold mb-2"><%= quiz.title %></p>
|
||||
<p class="text-white text-xl font-semibold mb-2">{quiz.title}</p>
|
||||
<%= link to: ~p"/export/quizzes/#{quiz.id}", class: "text-sm text-white bg-primary-500 hover:bg-primary-600 rounded-md px-3 py-1 flex items-center gap-1", method: :post, target: "_blank" do %>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
@@ -419,22 +419,22 @@
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" /><path d="M14 3v4a1 1 0 0 0 1 1h4" /><path d="M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2z" /><path d="M9 15h6" /><path d="M12.5 17.5l2.5 -2.5l-2.5 -2.5" />
|
||||
</svg>
|
||||
<span><%= gettext("Export") %> (CSV)</span>
|
||||
<span>{gettext("Export")} (CSV)</span>
|
||||
<% end %>
|
||||
</div>
|
||||
<p class="text-gray-400 text-sm">
|
||||
<%= gettext("Average score") %>:
|
||||
{gettext("Average score")}:
|
||||
<span class="font-semibold">
|
||||
<%= Claper.Quizzes.calculate_average_score(quiz.id) %>/<%= length(
|
||||
{Claper.Quizzes.calculate_average_score(quiz.id)}/{length(
|
||||
quiz.quiz_questions
|
||||
) %>
|
||||
)}
|
||||
</span>
|
||||
</p>
|
||||
|
||||
<p class="text-gray-400 text-sm">
|
||||
<%= gettext("Total submissions") %>:
|
||||
{gettext("Total submissions")}:
|
||||
<span class="font-semibold">
|
||||
<%= Claper.Quizzes.get_submission_count(quiz.id) %>
|
||||
{Claper.Quizzes.get_submission_count(quiz.id)}
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
@@ -443,7 +443,7 @@
|
||||
<%= for {question, _idx} <- Enum.with_index(quiz.quiz_questions) do %>
|
||||
<div class="border-t border-gray-700 pt-4 mt-4 first:border-t-0 first:pt-0 first:mt-0">
|
||||
<p class="text-white text-lg font-medium mb-3">
|
||||
<%= question.content %>
|
||||
{question.content}
|
||||
</p>
|
||||
<div class="space-y-2">
|
||||
<%= for opt <- question.quiz_question_opts do %>
|
||||
@@ -457,10 +457,10 @@
|
||||
<div class="h-5 w-5 mt-0.5 rounded-md point-select border-2 border-white">
|
||||
</div>
|
||||
<% end %>
|
||||
<span class="flex-1 pr-2"><%= opt.content %></span>
|
||||
<span class="flex-1 pr-2">{opt.content}</span>
|
||||
</div>
|
||||
<span class="text-sm">
|
||||
<%= opt.percentage %>% (<%= opt.response_count %>)
|
||||
{opt.percentage}% ({opt.response_count})
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -473,7 +473,7 @@
|
||||
<% end %>
|
||||
</div>
|
||||
<% else %>
|
||||
<p class="italic text-gray-500"><%= gettext("No quiz has been created") %></p>
|
||||
<p class="italic text-gray-500">{gettext("No quiz has been created")}</p>
|
||||
<% end %>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<div class="border-b border-gray-200 py-4 sm:flex sm:items-center sm:justify-between">
|
||||
<div class="flex-1 min-w-0">
|
||||
<h1 class="text-2xl font-medium leading-6 text-gray-900 sm:truncate">
|
||||
<%= gettext("My account") %>
|
||||
{gettext("My account")}
|
||||
</h1>
|
||||
</div>
|
||||
<div class="mt-4 flex sm:mt-0 sm:ml-4"></div>
|
||||
@@ -26,7 +26,7 @@
|
||||
id="update_email"
|
||||
class="mt-5 md:flex md:items-end"
|
||||
>
|
||||
<%= hidden_input(f, :action, name: "action", value: "update_email") %>
|
||||
{hidden_input(f, :action, name: "action", value: "update_email")}
|
||||
|
||||
<ClaperWeb.Component.Input.email
|
||||
form={f}
|
||||
@@ -35,11 +35,11 @@
|
||||
required="true"
|
||||
/>
|
||||
|
||||
<%= submit(gettext("Save"),
|
||||
{submit(gettext("Save"),
|
||||
phx_disable_with: "Saving...",
|
||||
class:
|
||||
"mt-2 w-full h-14 inline-flex transition-all items-center justify-center px-4 py-2 shadow-sm font-medium rounded-md text-white bg-black hover:bg-primary-500 md:mt-0 md:ml-3 md:w-auto md:text-sm"
|
||||
) %>
|
||||
)}
|
||||
</.form>
|
||||
</div>
|
||||
</.live_component>
|
||||
@@ -62,7 +62,7 @@
|
||||
id="update_password"
|
||||
class="mt-5 md:flex md:items-end gap-x-2"
|
||||
>
|
||||
<%= hidden_input(f, :action, name: "action", value: "update_password") %>
|
||||
{hidden_input(f, :action, name: "action", value: "update_password")}
|
||||
|
||||
<ClaperWeb.Component.Input.password
|
||||
form={f}
|
||||
@@ -77,11 +77,11 @@
|
||||
required="true"
|
||||
/>
|
||||
|
||||
<%= submit(gettext("Save"),
|
||||
{submit(gettext("Save"),
|
||||
phx_disable_with: "Saving...",
|
||||
class:
|
||||
"mt-2 w-full h-14 inline-flex transition-all items-center justify-center px-4 py-2 shadow-sm font-medium rounded-md text-white bg-black hover:bg-primary-500 md:mt-0 md:ml-3 md:w-auto md:text-sm"
|
||||
) %>
|
||||
)}
|
||||
</.form>
|
||||
</div>
|
||||
</.live_component>
|
||||
@@ -104,7 +104,7 @@
|
||||
id="set_password"
|
||||
class="mt-5 md:flex md:items-end gap-x-2"
|
||||
>
|
||||
<%= hidden_input(f, :action, name: "action", value: "set_password") %>
|
||||
{hidden_input(f, :action, name: "action", value: "set_password")}
|
||||
|
||||
<ClaperWeb.Component.Input.password
|
||||
form={f}
|
||||
@@ -120,11 +120,11 @@
|
||||
required="true"
|
||||
/>
|
||||
|
||||
<%= submit(gettext("Save"),
|
||||
{submit(gettext("Save"),
|
||||
phx_disable_with: "Saving...",
|
||||
class:
|
||||
"mt-2 w-full h-14 inline-flex transition-all items-center justify-center px-4 py-2 shadow-sm font-medium rounded-md text-white bg-black hover:bg-primary-500 md:mt-0 md:ml-3 md:w-auto md:text-sm"
|
||||
) %>
|
||||
)}
|
||||
</.form>
|
||||
</div>
|
||||
</.live_component>
|
||||
@@ -133,32 +133,32 @@
|
||||
<div class="shadow overflow-hidden sm:rounded-lg">
|
||||
<div class="py-5">
|
||||
<h3 class="text-lg leading-6 font-medium text-gray-900">
|
||||
<%= gettext("Personal informations") %>
|
||||
{gettext("Personal informations")}
|
||||
</h3>
|
||||
<p class="mt-1 max-w-2xl text-sm text-gray-500">
|
||||
<%= gettext("Your personal informations to access your account") %>
|
||||
{gettext("Your personal informations to access your account")}
|
||||
</p>
|
||||
</div>
|
||||
<div class="border-t border-gray-200 py-5 sm:p-0">
|
||||
<dl class="sm:divide-y sm:divide-gray-200">
|
||||
<div class="py-4 sm:py-5 sm:grid sm:grid-cols-2 sm:gap-4">
|
||||
<dt class="text-sm font-medium text-gray-500">
|
||||
<%= gettext("Email address") %>
|
||||
{gettext("Email address")}
|
||||
</dt>
|
||||
<dd class="mt-1 text-sm text-gray-900 sm:mt-0 sm:col-span-2">
|
||||
<span class="flex-grow"><%= @current_user.email %></span>
|
||||
<span class="flex-grow">{@current_user.email}</span>
|
||||
<span :if={!@is_external_user} class="ml-4 flex-shrink-0">
|
||||
<.link
|
||||
patch={~p"/users/settings/edit/email"}
|
||||
class="rounded-md font-medium text-purple-600 hover:text-purple-500"
|
||||
>
|
||||
<%= gettext("Change") %>
|
||||
{gettext("Change")}
|
||||
</.link>
|
||||
</span>
|
||||
</dd>
|
||||
|
||||
<dt :if={!@is_external_user} class="text-sm font-medium text-gray-500">
|
||||
<%= gettext("Password") %>
|
||||
{gettext("Password")}
|
||||
</dt>
|
||||
<dd :if={!@is_external_user} class="mt-1 text-sm text-gray-900 sm:mt-0 sm:col-span-2">
|
||||
<span class="flex-grow">********</span>
|
||||
@@ -167,20 +167,20 @@
|
||||
patch={~p"/users/settings/edit/password"}
|
||||
class="rounded-md font-medium text-purple-600 hover:text-purple-500"
|
||||
>
|
||||
<%= gettext("Change") %>
|
||||
{gettext("Change")}
|
||||
</.link>
|
||||
</span>
|
||||
</dd>
|
||||
|
||||
<dt :if={@is_external_user} class="text-sm font-medium text-gray-500">
|
||||
<%= gettext("Accounts linked") %>
|
||||
{gettext("Accounts linked")}
|
||||
</dt>
|
||||
<dd class="text-sm text-gray-900 sm:col-span-2">
|
||||
<%= for account <- @oidc_accounts do %>
|
||||
<div class="text-sm text-gray-900 bg-white rounded-md py-2 px-4 shadow-base flex gap-x-2 items-center justify-start mt-2 sm:mt-0 mb-2">
|
||||
<img src="/images/icons/openid.png" class="w-5" />
|
||||
<span class="flex-grow flex items-center gap-x-2">
|
||||
<span><%= account.provider %></span>
|
||||
<span>{account.provider}</span>
|
||||
<div
|
||||
:if={account.organization}
|
||||
class="text-gray-500 text-xs flex items-center gap-x-1"
|
||||
@@ -198,7 +198,7 @@
|
||||
/>
|
||||
</svg>
|
||||
|
||||
<span><%= account.organization %></span>
|
||||
<span>{account.organization}</span>
|
||||
</div>
|
||||
</span>
|
||||
<span :if={@allow_unlink_external_provider}>
|
||||
@@ -208,7 +208,7 @@
|
||||
data-confirm={gettext("Are you sure you want to unlink this account?")}
|
||||
class="font-medium text-red-600 hover:text-red-500"
|
||||
>
|
||||
<%= gettext("Unlink") %>
|
||||
{gettext("Unlink")}
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
@@ -217,7 +217,7 @@
|
||||
<div class="text-sm text-gray-900 bg-white rounded-md py-2 px-4 shadow-base flex gap-x-2 items-center justify-start mb-2">
|
||||
<img src="/images/icons/lms.png" class="w-8" />
|
||||
<span class="flex-grow">
|
||||
LMS <span class="text-gray-500 text-xs">#<%= account.registration_id %></span>
|
||||
LMS <span class="text-gray-500 text-xs">#{account.registration_id}</span>
|
||||
</span>
|
||||
<span :if={@allow_unlink_external_provider} class="ml-4 flex-shrink-0">
|
||||
<button
|
||||
@@ -226,7 +226,7 @@
|
||||
data-confirm={gettext("Are you sure you want to unlink this account?")}
|
||||
class="font-medium text-red-600 hover:text-red-500"
|
||||
>
|
||||
<%= gettext("Unlink") %>
|
||||
{gettext("Unlink")}
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
@@ -238,17 +238,17 @@
|
||||
<div>
|
||||
<div class="py-5">
|
||||
<h3 class="text-lg leading-6 font-medium text-gray-900">
|
||||
<%= gettext("Preferences") %>
|
||||
{gettext("Preferences")}
|
||||
</h3>
|
||||
<p class="mt-1 max-w-2xl text-sm text-gray-500">
|
||||
<%= gettext("Customize your account") %>
|
||||
{gettext("Customize your account")}
|
||||
</p>
|
||||
</div>
|
||||
<div class="border-t border-gray-200 py-5 sm:p-0">
|
||||
<dl class="sm:divide-y sm:divide-gray-200">
|
||||
<div class="mt-5">
|
||||
<.form :let={f} for={@preferences_changeset} phx-change="save">
|
||||
<%= hidden_input(f, :action, name: "action", value: "update_preferences") %>
|
||||
{hidden_input(f, :action, name: "action", value: "update_preferences")}
|
||||
<ClaperWeb.Component.Input.select
|
||||
form={f}
|
||||
fieldClass="!w-auto"
|
||||
@@ -272,23 +272,23 @@
|
||||
<div :if={!@is_external_user}>
|
||||
<div class="py-5">
|
||||
<h3 class="text-lg leading-6 font-medium text-gray-900">
|
||||
<%= gettext("Danger zone") %>
|
||||
{gettext("Danger zone")}
|
||||
</h3>
|
||||
<p class="mt-1 max-w-2xl text-sm text-gray-500">
|
||||
<%= gettext("Be careful, these actions are irreversible") %>
|
||||
{gettext("Be careful, these actions are irreversible")}
|
||||
</p>
|
||||
</div>
|
||||
<div class="border-t border-gray-200 py-5 sm:p-0">
|
||||
<dl class="sm:divide-y sm:divide-gray-200">
|
||||
<div class="my-5">
|
||||
<%= link(gettext("Delete account"),
|
||||
{link(gettext("Delete account"),
|
||||
to: ~p"/users/register/delete",
|
||||
method: :delete,
|
||||
"data-confirm":
|
||||
gettext("All your events and files will be permanently deleted, 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"
|
||||
) %>
|
||||
)}
|
||||
</div>
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<%= csrf_meta_tag() %>
|
||||
{csrf_meta_tag()}
|
||||
<title>Not found - Claper</title>
|
||||
<link rel="icon" type="image/png" href="/images/favicon.png" />
|
||||
<link phx-track-static rel="stylesheet" href="/assets/app.css" />
|
||||
@@ -28,12 +28,12 @@
|
||||
</a>
|
||||
</h2>
|
||||
<p class="mt-6 text-xl md:text-3xl font-bold text-gray-100">
|
||||
<%= gettext("Oops, page doesn't exist.") %>
|
||||
{gettext("Oops, page doesn't exist.")}
|
||||
</p>
|
||||
|
||||
<div class="mt-10">
|
||||
<a href="/" class="text-sm text-white underline">
|
||||
<%= gettext("Return to home") %>
|
||||
{gettext("Return to home")}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<%= csrf_meta_tag() %>
|
||||
{csrf_meta_tag()}
|
||||
<title>Not found - Claper</title>
|
||||
<link rel="icon" type="image/png" href="/images/favicon.png" />
|
||||
<link phx-track-static rel="stylesheet" href="/assets/app.css" />
|
||||
@@ -28,13 +28,13 @@
|
||||
</a>
|
||||
</h2>
|
||||
<p class="mt-6 text-xl md:text-3xl font-bold text-gray-100">
|
||||
<%= gettext("The site is under maintenance, we'll be back very soon!") %>
|
||||
{gettext("The site is under maintenance, we'll be back very soon!")}
|
||||
</p>
|
||||
|
||||
<div class="mt-10">
|
||||
<p class="mt-5">
|
||||
<a href="/" class="text-sm text-white underline">
|
||||
<%= gettext("Return to home") %>
|
||||
{gettext("Return to home")}
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -2,31 +2,31 @@
|
||||
<div class="max-w-3xl w-full p-10">
|
||||
<div class="text-center">
|
||||
<h1 class="text-4xl font-bold text-gray-900 mb-2">
|
||||
<%= gettext("CSRF Verification Failed") %>
|
||||
{gettext("CSRF Verification Failed")}
|
||||
</h1>
|
||||
<p class="text-lg text-gray-700 mb-8">
|
||||
<%= gettext("A required security token was not found or was invalid.") %>
|
||||
{gettext("A required security token was not found or was invalid.")}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="space-y-6 text-center">
|
||||
<p class="text-gray-700">
|
||||
<%= gettext("If you're continually seeing this issue, try the following:") %>
|
||||
{gettext("If you're continually seeing this issue, try the following:")}
|
||||
</p>
|
||||
<ol class="list-decimal list-inside space-y-2 text-gray-600">
|
||||
<li><%= gettext("Clear cookies (at least for Claper domain)") %></li>
|
||||
<li><%= gettext("Reload the page you're trying to access (don't re-submit data)") %></li>
|
||||
<li><%= gettext("Try logging in again") %></li>
|
||||
<li><%= gettext("Ensure the URL does not contain an extra \"/\" anywhere") %></li>
|
||||
<li>{gettext("Clear cookies (at least for Claper domain)")}</li>
|
||||
<li>{gettext("Reload the page you're trying to access (don't re-submit data)")}</li>
|
||||
<li>{gettext("Try logging in again")}</li>
|
||||
<li>{gettext("Ensure the URL does not contain an extra \"/\" anywhere")}</li>
|
||||
</ol>
|
||||
<p class="text-gray-700 mt-6">
|
||||
<%= gettext("If the problem persists, please contact support.") %>
|
||||
{gettext("If the problem persists, please contact support.")}
|
||||
</p>
|
||||
<div class="mt-8">
|
||||
<%= link(gettext("Back to Login"),
|
||||
{link(gettext("Back to Login"),
|
||||
to: ~p"/users/log_in",
|
||||
class: "text-blue underline font-semibold transition duration-300 ease-in-out"
|
||||
) %>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
<% else %>
|
||||
<div class="bg-neutral-500 h-10 w-10 rounded-full text-center flex items-center justify-center">
|
||||
<%= if @user.full_name do %>
|
||||
<%= with [first | _] <- String.codepoints(@user.full_name), do: String.capitalize(first) %>
|
||||
{with [first | _] <- String.codepoints(@user.full_name), do: String.capitalize(first)}
|
||||
<% else %>
|
||||
<%= with [first | _] <- String.codepoints(@user.email), do: String.capitalize(first) %>
|
||||
{with [first | _] <- String.codepoints(@user.email), do: String.capitalize(first)}
|
||||
<% end %>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
aria-haspopup="true"
|
||||
>
|
||||
<span class="sr-only">Open user menu</span>
|
||||
<span class="hidden md:block"><%= @user.email %></span>
|
||||
<span class="hidden md:block">{@user.email}</span>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 20 20"
|
||||
@@ -44,7 +44,7 @@
|
||||
aria-labelledby="user-menu-button"
|
||||
tabindex="-1"
|
||||
>
|
||||
<%= render("_user_menu.html", conn: @conn, user: @user) %>
|
||||
{render("_user_menu.html", conn: @conn, user: @user)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -3,24 +3,24 @@
|
||||
href={~p"/users/settings"}
|
||||
class="text-gray-700 block px-4 py-2 text-sm hover:bg-gray-100 hover:text-gray-900"
|
||||
>
|
||||
<%= gettext("My account") %>
|
||||
{gettext("My account")}
|
||||
</a>
|
||||
<a
|
||||
href="https://docs.claper.co"
|
||||
class="text-gray-700 block px-4 py-2 text-sm hover:bg-gray-100 hover:text-gray-900"
|
||||
>
|
||||
<%= gettext("Documentation") %>
|
||||
{gettext("Documentation")}
|
||||
</a>
|
||||
</div>
|
||||
<div class="py-1" role="none">
|
||||
<%= link(gettext("Logout"),
|
||||
{link(gettext("Logout"),
|
||||
to: ~p"/users/log_out",
|
||||
method: :delete,
|
||||
class: "text-gray-700 block px-4 py-2 text-sm hover:bg-gray-100 hover:text-gray-900"
|
||||
) %>
|
||||
)}
|
||||
</div>
|
||||
<div class="py-1" role="none">
|
||||
<p class="text-gray-500 block px-4 text-xs py-1">
|
||||
Version <%= Application.spec(:claper, :vsn) %>
|
||||
Version {Application.spec(:claper, :vsn)}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -8,4 +8,4 @@
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<%= @inner_content %>
|
||||
{@inner_content}
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
<td style="height:20px;"> </td>
|
||||
</tr>
|
||||
|
||||
<%= @inner_content %>
|
||||
{@inner_content}
|
||||
|
||||
<tr>
|
||||
<td style="text-align:center;">
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
<div class="fixed max-w-xl w-full bottom-5 left-1/2 tranform -translate-x-1/2 z-10">
|
||||
<%= if live_flash(@flash, :info) do %>
|
||||
<ClaperWeb.Component.Alert.info message={live_flash(@flash, :info)} />
|
||||
<%= if Phoenix.Flash.get(@flash, :info) do %>
|
||||
<ClaperWeb.Component.Alert.info message={Phoenix.Flash.get(@flash, :info)} />
|
||||
<% end %>
|
||||
|
||||
<%= if live_flash(@flash, :error) do %>
|
||||
<ClaperWeb.Component.Alert.error message={live_flash(@flash, :error)} />
|
||||
<%= if Phoenix.Flash.get(@flash, :error) do %>
|
||||
<ClaperWeb.Component.Alert.error message={Phoenix.Flash.get(@flash, :error)} />
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<%= @inner_content %>
|
||||
{@inner_content}
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<%= csrf_meta_tag() %>
|
||||
<.live_title suffix=" · Claper" )><%= assigns[:page_title] || "Claper" %></.live_title>
|
||||
{csrf_meta_tag()}
|
||||
<.live_title suffix=" · Claper" )>{assigns[:page_title] || "Claper"}</.live_title>
|
||||
<link rel="icon" type="image/png" href="/images/favicon.png" />
|
||||
<link phx-track-static rel="stylesheet" href="/assets/app.css" />
|
||||
<link phx-track-static rel="stylesheet" href="/assets/custom.css" />
|
||||
@@ -17,7 +17,7 @@
|
||||
<!-- Main column -->
|
||||
<div class="flex flex-col">
|
||||
<main class="flex-1">
|
||||
<%= @inner_content %>
|
||||
{@inner_content}
|
||||
</main>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<%= csrf_meta_tag() %>
|
||||
<.live_title suffix=" · Claper" )><%= assigns[:page_title] || "Claper" %></.live_title>
|
||||
{csrf_meta_tag()}
|
||||
<.live_title suffix=" · Claper" )>{assigns[:page_title] || "Claper"}</.live_title>
|
||||
<link phx-track-static rel="stylesheet" href="/assets/app.css" />
|
||||
<link rel="icon" type="image/png" href="/images/favicon.png" />
|
||||
<link phx-track-static rel="stylesheet" href="/assets/custom.css" />
|
||||
@@ -16,9 +16,9 @@
|
||||
<div class="min-h-full">
|
||||
<!-- Main column -->
|
||||
<div class="flex flex-col" x-data="{profileMobileDropdown: false}">
|
||||
<%= render("_profile_dropdown.html", user: @current_user, conn: @conn) %>
|
||||
{render("_profile_dropdown.html", user: @current_user, conn: @conn)}
|
||||
<main class="flex-1">
|
||||
<%= @inner_content %>
|
||||
{@inner_content}
|
||||
</main>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -14,25 +14,25 @@
|
||||
<tr>
|
||||
<td style="padding:0 35px;">
|
||||
<h1 style="color:#1e1e2d; font-weight:500; margin:0;font-size:32px;font-family:'Rubik',sans-serif;">
|
||||
<%= gettext("You have been invited") %>
|
||||
{gettext("You have been invited")}
|
||||
</h1>
|
||||
<span style="display:inline-block; vertical-align:middle; margin:29px 0 26px; border-bottom:1px solid #cecece; width:100px;">
|
||||
</span>
|
||||
<p style="color:#455056; font-size:15px;line-height:24px; margin:0;">
|
||||
<%= gettext("Someone invited you to manage the event: %{name}", name: @event_name) %>
|
||||
{gettext("Someone invited you to manage the event: %{name}", name: @event_name)}
|
||||
</p>
|
||||
<p style="color:#455056; font-size:15px;line-height:24px; margin:0;">
|
||||
<%= gettext(
|
||||
{gettext(
|
||||
"To accept the invitation, please login or create an account with this email: %{email}",
|
||||
email: @leader_email
|
||||
) %>
|
||||
)}
|
||||
</p>
|
||||
<a
|
||||
href={@url}
|
||||
target="_blank"
|
||||
style="background:#8611ed;text-decoration:none !important; font-weight:500; margin-top:35px; color:#fff;text-transform:uppercase; font-size:14px;padding:10px 24px;display:inline-block;border-radius:50px;"
|
||||
>
|
||||
<%= gettext("Login or create account") %>
|
||||
{gettext("Login or create account")}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -42,11 +42,11 @@
|
||||
<tr>
|
||||
<td style="font-size: 0.8em; color: #6C6C6C">
|
||||
<p class="sub">
|
||||
<%= gettext(
|
||||
{gettext(
|
||||
"If you’re having trouble with the button above, copy and paste the URL below into your web browser"
|
||||
) %>.
|
||||
)}.
|
||||
</p>
|
||||
<p class="sub"><%= @url %></p>
|
||||
<p class="sub">{@url}</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
<div class="relative h-screen bg-black flex justify-center items-center">
|
||||
<div class="max-w-xl text-center">
|
||||
<p class="text-4xl font-bold text-gray-100 flex items-center justify-center gap-x-2">
|
||||
<span><%= gettext("Oops") %></span>
|
||||
<span>{gettext("Oops")}</span>
|
||||
</p>
|
||||
<div class="my-8">
|
||||
<p class="text-gray-200 font-bold">
|
||||
<%= gettext("You cannot perform this action") %>
|
||||
{gettext("You cannot perform this action")}
|
||||
</p>
|
||||
<pre class="text-gray-200 my-4 text-sm bg-gray-800 p-2 rounded-lg"><%= @msg %></pre>
|
||||
</div>
|
||||
@@ -14,7 +14,7 @@
|
||||
class="mx-auto mt-8 flex justify-center text-white p-4 rounded-md tracking-wide font-bold focus:outline-none focus:shadow-outline shadow-lg bg-gradient-to-tl from-primary-500 to-secondary-500 bg-size-200 bg-pos-0 hover:bg-pos-100 transition-all duration-500"
|
||||
onclick="window.close()"
|
||||
>
|
||||
<%= gettext("Close") %>
|
||||
{gettext("Close")}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -21,10 +21,10 @@
|
||||
<img src="/images/lms-platforms.png" class="h-12 w-auto inline" />
|
||||
</div>
|
||||
<h2 class="mt-6 text-4xl md:text-6xl font-bold text-gray-100">
|
||||
<%= gettext("Bring Claper to your LMS") %>
|
||||
{gettext("Bring Claper to your LMS")}
|
||||
</h2>
|
||||
<p class="mt-10 text-2xl md:text-4xl text-gray-200">
|
||||
<%= gettext("Register your platform") %>
|
||||
{gettext("Register your platform")}
|
||||
</p>
|
||||
</div>
|
||||
<div class="flex flex-row justify-center items-center space-x-3"></div>
|
||||
@@ -37,10 +37,10 @@
|
||||
type="submit"
|
||||
class="flex justify-center text-white p-4 rounded-md tracking-wide font-bold focus:outline-none focus:shadow-outline shadow-lg bg-gradient-to-tl from-primary-500 to-secondary-500 bg-size-200 bg-pos-0 hover:bg-pos-100 transition-all duration-500"
|
||||
>
|
||||
<%= gettext("Add Claper") %>
|
||||
{gettext("Add Claper")}
|
||||
</button>
|
||||
<p :if={!@current_user} class="text-white italic">
|
||||
<%= gettext("You must login to continue") %>
|
||||
{gettext("You must login to continue")}
|
||||
</p>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
@@ -2,19 +2,19 @@
|
||||
<div class="relative h-screen bg-black flex justify-center items-center">
|
||||
<div class="max-w-xl text-center">
|
||||
<p class="text-4xl font-bold text-gray-100 flex items-center justify-center gap-x-2">
|
||||
<span><%= gettext("Registration completed") %></span>
|
||||
<span>{gettext("Registration completed")}</span>
|
||||
<img src="/images/icons/thumb.svg" class="h-12 -mt-3" />
|
||||
</p>
|
||||
<div class="my-8">
|
||||
<p class="text-gray-200">
|
||||
<%= gettext("Your next steps") %>:
|
||||
{gettext("Your next steps")}:
|
||||
</p>
|
||||
<div class="mt-4 bg-gray-800 p-6 rounded-lg shadow-lg border border-white">
|
||||
<ol class="list-decimal list-inside text-gray-200">
|
||||
<li class="mb-2"><%= gettext("Activate the tool in your LMS") %></li>
|
||||
<li class="mb-2"><%= gettext("Configure it to be opened in a new window") %></li>
|
||||
<li class="mb-2">{gettext("Activate the tool in your LMS")}</li>
|
||||
<li class="mb-2">{gettext("Configure it to be opened in a new window")}</li>
|
||||
<li class="mb-2">
|
||||
<%= gettext("Check the permissions to share name and email of users") %>
|
||||
{gettext("Check the permissions to share name and email of users")}
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
@@ -23,7 +23,7 @@
|
||||
class="mx-auto mt-8 flex justify-center text-white p-4 rounded-md tracking-wide font-bold focus:outline-none focus:shadow-outline shadow-lg bg-gradient-to-tl from-primary-500 to-secondary-500 bg-size-200 bg-pos-0 hover:bg-pos-100 transition-all duration-500"
|
||||
onclick="(window.opener || window.parent).postMessage({subject:'org.imsglobal.lti.close'}, '*');"
|
||||
>
|
||||
<%= gettext("Finish") %>
|
||||
{gettext("Finish")}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -2,12 +2,12 @@
|
||||
|
||||
<.form :let={_f} for={:user} action={~p"/users/confirm/#{@token}"}>
|
||||
<div>
|
||||
<%= submit("Confirm my account") %>
|
||||
{submit("Confirm my account")}
|
||||
</div>
|
||||
</.form>
|
||||
|
||||
<p>
|
||||
<%= link("Register", to: ~p"/users/register") %> | <%= link("Log in",
|
||||
{link("Register", to: ~p"/users/register")} | {link("Log in",
|
||||
to: ~p"/users/log_in"
|
||||
) %>
|
||||
)}
|
||||
</p>
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
<h1>Resend confirmation instructions</h1>
|
||||
|
||||
<.form :let={f} for={:user} action={~p"/users/confirm"}>
|
||||
<%= label(f, :email) %>
|
||||
<%= email_input(f, :email, required: true) %>
|
||||
{label(f, :email)}
|
||||
{email_input(f, :email, required: true)}
|
||||
|
||||
<div>
|
||||
<%= submit("Resend confirmation instructions") %>
|
||||
{submit("Resend confirmation instructions")}
|
||||
</div>
|
||||
</.form>
|
||||
|
||||
<p>
|
||||
<%= link("Register", to: ~p"/users/register") %> | <%= link("Log in",
|
||||
{link("Register", to: ~p"/users/register")} | {link("Log in",
|
||||
to: ~p"/users/log_in"
|
||||
) %>
|
||||
)}
|
||||
</p>
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
<h1>Resend confirmation instructions</h1>
|
||||
|
||||
<%= form_for :user, ~p"/users/confirm", fn f -> %>
|
||||
<%= label(f, :email) %>
|
||||
<%= email_input(f, :email, required: true) %>
|
||||
{label(f, :email)}
|
||||
{email_input(f, :email, required: true)}
|
||||
|
||||
<div>
|
||||
<%= submit("Resend confirmation instructions") %>
|
||||
{submit("Resend confirmation instructions")}
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<p>
|
||||
<%= link("Register", to: ~p"/users/register") %> | <%= link("Log in",
|
||||
{link("Register", to: ~p"/users/register")} | {link("Log in",
|
||||
to: ~p"/users/log_in"
|
||||
) %>
|
||||
)}
|
||||
</p>
|
||||
|
||||
@@ -14,22 +14,22 @@
|
||||
<tr>
|
||||
<td style="padding:0 35px;">
|
||||
<h1 style="color:#1e1e2d; font-weight:500; margin:0;font-size:32px;font-family:'Rubik',sans-serif;">
|
||||
<%= gettext("Confirm email") %>
|
||||
{gettext("Confirm email")}
|
||||
</h1>
|
||||
<span style="display:inline-block; vertical-align:middle; margin:29px 0 26px; border-bottom:1px solid #cecece; width:100px;">
|
||||
</span>
|
||||
<p style="color:#455056; font-size:15px;line-height:24px; margin:0;">
|
||||
<%= gettext("You can change your email by visiting the URL below") %>
|
||||
{gettext("You can change your email by visiting the URL below")}
|
||||
</p>
|
||||
<a
|
||||
href={@url}
|
||||
target="_blank"
|
||||
style="background:#8611ed;text-decoration:none !important; font-weight:500; margin-top:35px; color:#fff;text-transform:uppercase; font-size:14px;padding:10px 24px;display:inline-block;border-radius:50px;"
|
||||
>
|
||||
<%= gettext("CONFIRM EMAIL") %>
|
||||
{gettext("CONFIRM EMAIL")}
|
||||
</a>
|
||||
<p style="color:#455056; font-size:15px;line-height:24px; margin-top:26px;">
|
||||
<%= gettext("If you didn't create an account with us, please ignore this.") %>
|
||||
{gettext("If you didn't create an account with us, please ignore this.")}
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -39,11 +39,11 @@
|
||||
<tr>
|
||||
<td style="font-size: 0.8em; color: #6C6C6C">
|
||||
<p class="sub">
|
||||
<%= gettext(
|
||||
{gettext(
|
||||
"If you’re having trouble with the button above, copy and paste the URL below into your web browser"
|
||||
) %>.
|
||||
)}.
|
||||
</p>
|
||||
<p class="sub"><%= @url %></p>
|
||||
<p class="sub">{@url}</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
||||
@@ -14,22 +14,22 @@
|
||||
<tr>
|
||||
<td style="padding:0 35px;">
|
||||
<h1 style="color:#1e1e2d; font-weight:500; margin:0;font-size:32px;font-family:'Rubik',sans-serif;">
|
||||
<%= gettext("Confirm account") %>
|
||||
{gettext("Confirm account")}
|
||||
</h1>
|
||||
<span style="display:inline-block; vertical-align:middle; margin:29px 0 26px; border-bottom:1px solid #cecece; width:100px;">
|
||||
</span>
|
||||
<p style="color:#455056; font-size:15px;line-height:24px; margin:0;">
|
||||
<%= gettext("You can confirm your account by visiting the URL below") %>
|
||||
{gettext("You can confirm your account by visiting the URL below")}
|
||||
</p>
|
||||
<a
|
||||
href={@url}
|
||||
target="_blank"
|
||||
style="background:#8611ed;text-decoration:none !important; font-weight:500; margin-top:35px; color:#fff;text-transform:uppercase; font-size:14px;padding:10px 24px;display:inline-block;border-radius:50px;"
|
||||
>
|
||||
<%= gettext("CONFIRM ACCOUNT") %>
|
||||
{gettext("CONFIRM ACCOUNT")}
|
||||
</a>
|
||||
<p style="color:#455056; font-size:15px;line-height:24px; margin-top:26px;">
|
||||
<%= gettext("If you didn't create an account with us, please ignore this.") %>
|
||||
{gettext("If you didn't create an account with us, please ignore this.")}
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -39,11 +39,11 @@
|
||||
<tr>
|
||||
<td style="font-size: 0.8em; color: #6C6C6C">
|
||||
<p class="sub">
|
||||
<%= gettext(
|
||||
{gettext(
|
||||
"If you’re having trouble with the button above, copy and paste the URL below into your web browser"
|
||||
) %>.
|
||||
)}.
|
||||
</p>
|
||||
<p class="sub"><%= @url %></p>
|
||||
<p class="sub">{@url}</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
||||
@@ -14,22 +14,22 @@
|
||||
<tr>
|
||||
<td style="padding:0 35px;">
|
||||
<h1 style="color:#1e1e2d; font-weight:500; margin:0;font-size:32px;font-family:'Rubik',sans-serif;">
|
||||
<%= gettext("Connect to Claper") %>
|
||||
{gettext("Connect to Claper")}
|
||||
</h1>
|
||||
<span style="display:inline-block; vertical-align:middle; margin:29px 0 26px; border-bottom:1px solid #cecece; width:100px;">
|
||||
</span>
|
||||
<p style="color:#455056; font-size:15px;line-height:24px; margin:0;">
|
||||
<%= gettext("You can log into your account by clicking here.") %>
|
||||
{gettext("You can log into your account by clicking here.")}
|
||||
</p>
|
||||
<a
|
||||
href={@url}
|
||||
target="_blank"
|
||||
style="background:#8611ed;text-decoration:none !important; font-weight:500; margin-top:35px; color:#fff;text-transform:uppercase; font-size:14px;padding:10px 24px;display:inline-block;border-radius:50px;"
|
||||
>
|
||||
<%= gettext("ACCESS TO MY ACCOUNT") %>
|
||||
{gettext("ACCESS TO MY ACCOUNT")}
|
||||
</a>
|
||||
<p style="color:#455056; font-size:15px;line-height:24px; margin-top:26px;">
|
||||
<%= gettext("If you didn't create an account with us, please ignore this.") %>
|
||||
{gettext("If you didn't create an account with us, please ignore this.")}
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -39,11 +39,11 @@
|
||||
<tr>
|
||||
<td style="font-size: 0.8em; color: #6C6C6C">
|
||||
<p class="sub">
|
||||
<%= gettext(
|
||||
{gettext(
|
||||
"If you’re having trouble with the button above, copy and paste the URL below into your web browser"
|
||||
) %>.
|
||||
)}.
|
||||
</p>
|
||||
<p class="sub"><%= @url %></p>
|
||||
<p class="sub">{@url}</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
||||
@@ -14,22 +14,22 @@
|
||||
<tr>
|
||||
<td style="padding:0 35px;">
|
||||
<h1 style="color:#1e1e2d; font-weight:500; margin:0;font-size:32px;font-family:'Rubik',sans-serif;">
|
||||
<%= gettext("Reset password") %>
|
||||
{gettext("Reset password")}
|
||||
</h1>
|
||||
<span style="display:inline-block; vertical-align:middle; margin:29px 0 26px; border-bottom:1px solid #cecece; width:100px;">
|
||||
</span>
|
||||
<p style="color:#455056; font-size:15px;line-height:24px; margin:0;">
|
||||
<%= gettext("You can reset your password by visiting the URL below") %>
|
||||
{gettext("You can reset your password by visiting the URL below")}
|
||||
</p>
|
||||
<a
|
||||
href={@url}
|
||||
target="_blank"
|
||||
style="background:#8611ed;text-decoration:none !important; font-weight:500; margin-top:35px; color:#fff;text-transform:uppercase; font-size:14px;padding:10px 24px;display:inline-block;border-radius:50px;"
|
||||
>
|
||||
<%= gettext("RESET PASSWORD") %>
|
||||
{gettext("RESET PASSWORD")}
|
||||
</a>
|
||||
<p style="color:#455056; font-size:15px;line-height:24px; margin-top:26px;">
|
||||
<%= gettext("If you didn't create an account with us, please ignore this.") %>
|
||||
{gettext("If you didn't create an account with us, please ignore this.")}
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -39,11 +39,11 @@
|
||||
<tr>
|
||||
<td style="font-size: 0.8em; color: #6C6C6C">
|
||||
<p class="sub">
|
||||
<%= gettext(
|
||||
{gettext(
|
||||
"If you’re having trouble with the button above, copy and paste the URL below into your web browser"
|
||||
) %>.
|
||||
)}.
|
||||
</p>
|
||||
<p class="sub"><%= @url %></p>
|
||||
<p class="sub">{@url}</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
||||
@@ -14,59 +14,59 @@
|
||||
<tr>
|
||||
<td style="padding:0 35px;">
|
||||
<h1 style="color:#1e1e2d; font-weight:500; margin:0;font-size:32px;font-family:'Rubik',sans-serif;">
|
||||
<%= gettext("Welcome !") %>
|
||||
{gettext("Welcome !")}
|
||||
</h1>
|
||||
<span style="display:inline-block; vertical-align:middle; margin:29px 0 26px; border-bottom:1px solid #cecece; width:100px;">
|
||||
</span>
|
||||
<p style="color:#455056; font-size:15px;line-height:24px; margin:0;">
|
||||
<%= gettext(
|
||||
{gettext(
|
||||
"Congrats! You've taken the first step to improving your presentations. Here are the next steps to create step up your presentations with Claper:"
|
||||
) %>
|
||||
)}
|
||||
</p>
|
||||
<ol style="color:#455056; font-size:15px;line-height:24px; margin:10px 0px; text-align: left;">
|
||||
<li>
|
||||
<%= raw(
|
||||
{raw(
|
||||
gettext(
|
||||
"<span style='font-weight: 700'>Export your current presentation</span> to PDF from your favorite slide presentation software (PowerPoint, etc)"
|
||||
)
|
||||
) %>
|
||||
)}
|
||||
</li>
|
||||
<li>
|
||||
<%= raw(
|
||||
{raw(
|
||||
gettext(
|
||||
"Click on the <span style='font-weight: 700'>create button</span> on your dashboard"
|
||||
)
|
||||
) %>
|
||||
)}
|
||||
</li>
|
||||
<li>
|
||||
<%= raw(
|
||||
{raw(
|
||||
gettext(
|
||||
"Choose <span style='font-weight: 700'>a name</span> for your event, <span style='font-weight: 700'>a code</span> for your attendees to join and <span style='font-weight: 700'>dates when your attendees could start interacting</span>"
|
||||
)
|
||||
) %>
|
||||
)}
|
||||
</li>
|
||||
<li>
|
||||
<%= raw(
|
||||
{raw(
|
||||
gettext(
|
||||
"<span style='font-weight: 700'>Wait few minutes</span> for your file to be processed"
|
||||
)
|
||||
) %>
|
||||
)}
|
||||
</li>
|
||||
<li>
|
||||
<%= raw(
|
||||
{raw(
|
||||
gettext(
|
||||
"Click on <span style='font-weight: 700'>Present/Customize</span> to add interaction on your slides"
|
||||
)
|
||||
) %>
|
||||
)}
|
||||
</li>
|
||||
<li>
|
||||
<%= raw(
|
||||
{raw(
|
||||
gettext(
|
||||
"Click <span style='font-weight: 700'>Start</span> to open your presentation and move the window on the big screen"
|
||||
)
|
||||
) %>
|
||||
)}
|
||||
</li>
|
||||
<li><%= gettext("Enjoy ! ✨") %></li>
|
||||
<li>{gettext("Enjoy ! ✨")}</li>
|
||||
</ol>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -10,23 +10,23 @@
|
||||
</h2>
|
||||
<p class="mt-6 text-lg md:text-xl font-bold text-gray-100">
|
||||
<%= if @conn.query_params["retry"] do %>
|
||||
<%= gettext("We already sent you an email to login, please retry in 5 minutes.") %>
|
||||
{gettext("We already sent you an email to login, please retry in 5 minutes.")}
|
||||
<% else %>
|
||||
<%= if @conn.query_params["email"] do %>
|
||||
<%= gettext("We sent you an email at") <>
|
||||
{gettext("We sent you an email at") <>
|
||||
" #{@conn.query_params["email"]}" <>
|
||||
gettext(", click on the provided link to connect (check your spam !)") %>
|
||||
gettext(", click on the provided link to connect (check your spam !)")}
|
||||
<% else %>
|
||||
<%= gettext(
|
||||
{gettext(
|
||||
"We sent you an email, click on the provided link to connect (check your spam !)"
|
||||
) %>
|
||||
)}
|
||||
<% end %>
|
||||
<% end %>
|
||||
</p>
|
||||
|
||||
<div class="mt-10">
|
||||
<.link href={~p"/"} class="text-sm text-white underline">
|
||||
<%= gettext("back to the home page") %>
|
||||
{gettext("back to the home page")}
|
||||
</.link>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
</a>
|
||||
</h2>
|
||||
<h2 class="mt-6 text-3xl font-bold text-gray-100">
|
||||
<%= gettext("Join the Claper experience") %>
|
||||
{gettext("Join the Claper experience")}
|
||||
</h2>
|
||||
</div>
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
type="submit"
|
||||
class="w-full flex justify-center text-white p-4 rounded-full tracking-wide font-bold focus:outline-none focus:shadow-outline shadow-lg bg-gradient-to-tl from-primary-500 to-secondary-500 bg-size-200 bg-pos-0 hover:bg-pos-100 transition-all duration-500"
|
||||
>
|
||||
<%= gettext("Create account") %>
|
||||
{gettext("Create account")}
|
||||
</button>
|
||||
</div>
|
||||
</.form>
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
</a>
|
||||
</h2>
|
||||
<h2 class="mt-6 text-3xl font-bold text-gray-100">
|
||||
<%= gettext("Reset your password") %>
|
||||
{gettext("Reset your password")}
|
||||
</h2>
|
||||
</div>
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
type="submit"
|
||||
class="w-full flex justify-center text-white p-4 rounded-full tracking-wide font-bold focus:outline-none focus:shadow-outline shadow-lg bg-gradient-to-tl from-primary-500 to-secondary-500 bg-size-200 bg-pos-0 hover:bg-pos-100 transition-all duration-500"
|
||||
>
|
||||
<%= gettext("Confirm new password") %>
|
||||
{gettext("Confirm new password")}
|
||||
</button>
|
||||
</div>
|
||||
</.form>
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
</a>
|
||||
</h2>
|
||||
<h2 class="mt-6 text-3xl font-bold text-gray-100">
|
||||
<%= gettext("Reset your password") %>
|
||||
{gettext("Reset your password")}
|
||||
</h2>
|
||||
</div>
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
type="submit"
|
||||
class="w-full flex justify-center text-white p-4 rounded-full tracking-wide font-bold focus:outline-none focus:shadow-outline shadow-lg bg-gradient-to-tl from-primary-500 to-secondary-500 bg-size-200 bg-pos-0 hover:bg-pos-100 transition-all duration-500"
|
||||
>
|
||||
<%= gettext("Send link to reset password") %>
|
||||
{gettext("Send link to reset password")}
|
||||
</button>
|
||||
</div>
|
||||
</.form>
|
||||
|
||||
@@ -19,10 +19,10 @@
|
||||
<img src="/images/logo.svg" class="h-10 w-auto inline" />
|
||||
</h2>
|
||||
<h2 class="mt-6 text-4xl md:text-6xl font-bold text-gray-100">
|
||||
<%= gettext("It's time to empower your presentations.") %>
|
||||
{gettext("It's time to empower your presentations.")}
|
||||
</h2>
|
||||
<p class="mt-10 text-2xl md:text-4xl text-gray-200">
|
||||
<%= gettext("Connect to your account") %>
|
||||
{gettext("Connect to your account")}
|
||||
</p>
|
||||
</div>
|
||||
<div class="flex flex-row justify-center items-center space-x-3"></div>
|
||||
@@ -59,7 +59,7 @@
|
||||
type="submit"
|
||||
class="w-full flex justify-center text-white p-4 rounded-md tracking-wide font-bold focus:outline-none focus:shadow-outline shadow-lg bg-gradient-to-tl from-primary-500 to-secondary-500 bg-size-200 bg-pos-0 hover:bg-pos-100 transition-all duration-500"
|
||||
>
|
||||
<%= gettext("Login") %>
|
||||
{gettext("Login")}
|
||||
</button>
|
||||
</div>
|
||||
</.form>
|
||||
@@ -71,20 +71,20 @@
|
||||
"w-full flex justify-center items-center gap-x-2 py-2 px-4 rounded-md shadow-sm text-sm font-medium text-white border-2 border-secondary-500 hover:bg-secondary-500 hover:bg-opacity-40"
|
||||
) do %>
|
||||
<img width="24" src={@oidc_logo_url} />
|
||||
<span><%= gettext("Login with %{provider}", provider: @oidc_provider_name) %></span>
|
||||
<span>{gettext("Login with %{provider}", provider: @oidc_provider_name)}</span>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<div class="mt-4 text-center justify-center">
|
||||
<%= link(gettext("Forgot your password?"),
|
||||
{link(gettext("Forgot your password?"),
|
||||
to: ~p"/users/reset_password",
|
||||
class: "text-white text-sm text-center"
|
||||
) %>
|
||||
)}
|
||||
<%= if Application.get_env(:claper, :enable_account_creation) do %>
|
||||
<span class="text-white">•</span> <%= link(gettext("Create account"),
|
||||
<span class="text-white">•</span> {link(gettext("Create account"),
|
||||
to: ~p"/users/register",
|
||||
class: "text-white text-sm text-center"
|
||||
) %>
|
||||
)}
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -32,7 +32,7 @@ defmodule ClaperWeb.Component.Alert do
|
||||
</div>
|
||||
<div class="ml-3">
|
||||
<p class="text-sm text-supporting-green-700">
|
||||
<%= @message %>
|
||||
{@message}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -72,7 +72,7 @@ defmodule ClaperWeb.Component.Alert do
|
||||
</div>
|
||||
<div class="ml-3">
|
||||
<p class="text-sm text-supporting-red-700">
|
||||
<%= @message %>
|
||||
{@message}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -19,9 +19,9 @@ defmodule ClaperWeb.Component.Input do
|
||||
|
||||
~H"""
|
||||
<div class="relative">
|
||||
<%= label(@form, @key, @name, class: "block text-sm font-medium #{@labelClass}") %>
|
||||
{label(@form, @key, @name, class: "block text-sm font-medium #{@labelClass}")}
|
||||
<div class="mt-1">
|
||||
<%= text_input(@form, @key,
|
||||
{text_input(@form, @key,
|
||||
required: @required,
|
||||
readonly: @readonly,
|
||||
autofocus: @autofocus,
|
||||
@@ -32,10 +32,10 @@ defmodule ClaperWeb.Component.Input do
|
||||
maxlength: @maxlength,
|
||||
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-2 px-3"
|
||||
) %>
|
||||
)}
|
||||
</div>
|
||||
<%= if Keyword.has_key?(@form.errors, @key) do %>
|
||||
<p class="text-supporting-red-500 text-sm"><%= error_tag(@form, @key) %></p>
|
||||
<p class="text-supporting-red-500 text-sm">{error_tag(@form, @key)}</p>
|
||||
<% end %>
|
||||
</div>
|
||||
"""
|
||||
@@ -54,9 +54,9 @@ defmodule ClaperWeb.Component.Input do
|
||||
|
||||
~H"""
|
||||
<div class="relative">
|
||||
<%= label(@form, @key, @name, class: "block text-sm font-medium #{@labelClass}") %>
|
||||
{label(@form, @key, @name, class: "block text-sm font-medium #{@labelClass}")}
|
||||
<div class="mt-1">
|
||||
<%= text_input(@form, @key,
|
||||
{text_input(@form, @key,
|
||||
required: @required,
|
||||
readonly: @readonly,
|
||||
autofocus: @autofocus,
|
||||
@@ -65,10 +65,10 @@ defmodule ClaperWeb.Component.Input do
|
||||
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-2 px-3"
|
||||
) %>
|
||||
)}
|
||||
</div>
|
||||
<%= if Keyword.has_key?(@form.errors, @key) do %>
|
||||
<p class="text-supporting-red-500 text-sm"><%= error_tag(@form, @key) %></p>
|
||||
<p class="text-supporting-red-500 text-sm">{error_tag(@form, @key)}</p>
|
||||
<% end %>
|
||||
</div>
|
||||
"""
|
||||
@@ -85,19 +85,19 @@ defmodule ClaperWeb.Component.Input do
|
||||
|
||||
~H"""
|
||||
<div class="relative">
|
||||
<%= label(@form, @key, @name, class: "block text-sm font-medium #{@labelClass}") %>
|
||||
{label(@form, @key, @name, class: "block text-sm font-medium #{@labelClass}")}
|
||||
<div class="mt-1">
|
||||
<%= select(@form, @key, @array,
|
||||
{select(@form, @key, @array,
|
||||
required: @required,
|
||||
autofocus: @autofocus,
|
||||
placeholder: @placeholder,
|
||||
autocomplete: @key,
|
||||
class:
|
||||
"#{@fieldClass} outline-none shadow-base focus:ring-primary-500 focus:border-primary-500 block w-full text-lg border-gray-300 rounded-md py-2 px-3"
|
||||
) %>
|
||||
)}
|
||||
</div>
|
||||
<%= if Keyword.has_key?(@form.errors, @key) do %>
|
||||
<p class="text-supporting-red-500 text-sm"><%= error_tag(@form, @key) %></p>
|
||||
<p class="text-supporting-red-500 text-sm">{error_tag(@form, @key)}</p>
|
||||
<% end %>
|
||||
</div>
|
||||
"""
|
||||
@@ -156,7 +156,7 @@ defmodule ClaperWeb.Component.Input do
|
||||
phx-key={@shortcut}
|
||||
phx-window-keydown={if @shortcut && not @disabled, do: checked(@checked, @key)}
|
||||
>
|
||||
<%= render_slot(@inner_block) %>
|
||||
{render_slot(@inner_block)}
|
||||
</button>
|
||||
"""
|
||||
end
|
||||
@@ -201,14 +201,14 @@ defmodule ClaperWeb.Component.Input do
|
||||
|
||||
~H"""
|
||||
<div class="relative">
|
||||
<%= label(@form, @key, @name, class: "block text-sm font-medium text-gray-700") %>
|
||||
{label(@form, @key, @name, class: "block text-sm font-medium text-gray-700")}
|
||||
<div class="mt-1 relative">
|
||||
<img
|
||||
class="icon absolute transition-all top-2.5 left-2 duration-100 h-6"
|
||||
src="/images/icons/hashtag.svg"
|
||||
alt="code"
|
||||
/>
|
||||
<%= text_input(@form, @key,
|
||||
{text_input(@form, @key,
|
||||
required: @required,
|
||||
readonly: @readonly,
|
||||
placeholder: @placeholder,
|
||||
@@ -218,10 +218,10 @@ defmodule ClaperWeb.Component.Input do
|
||||
maxlength: 10,
|
||||
class:
|
||||
"read-only:opacity-50 outline-none shadow-base focus:ring-primary-500 focus:border-primary-500 block w-full text-lg border-gray-300 rounded-md py-2 pr-3 pl-9 uppercase"
|
||||
) %>
|
||||
)}
|
||||
</div>
|
||||
<%= if Keyword.has_key?(@form.errors, @key) do %>
|
||||
<p class="text-supporting-red-500 text-sm"><%= error_tag(@form, @key) %></p>
|
||||
<p class="text-supporting-red-500 text-sm">{error_tag(@form, @key)}</p>
|
||||
<% end %>
|
||||
</div>
|
||||
"""
|
||||
@@ -238,20 +238,20 @@ defmodule ClaperWeb.Component.Input do
|
||||
~H"""
|
||||
<div>
|
||||
<div class="relative" id="date" phx-hook="Pickr">
|
||||
<%= label(@form, @key, @name, class: "block text-sm font-medium text-gray-700") %>
|
||||
{label(@form, @key, @name, class: "block text-sm font-medium text-gray-700")}
|
||||
<div class="mt-1 relative">
|
||||
<%= hidden_input(@form, @key) %>
|
||||
<%= text_input(@form, :local_date,
|
||||
{hidden_input(@form, @key)}
|
||||
{text_input(@form, :local_date,
|
||||
autofocus: @autofocus,
|
||||
placeholder: @placeholder,
|
||||
autocomplete: false,
|
||||
class:
|
||||
"outline-none shadow-base focus:ring-primary-500 focus:border-primary-500 block w-full text-lg border-gray-300 rounded-md py-2 px-3 read-only:opacity-50"
|
||||
) %>
|
||||
)}
|
||||
</div>
|
||||
|
||||
<%= if Keyword.has_key?(@form.errors, @key) do %>
|
||||
<p class="text-supporting-red-500 text-sm"><%= error_tag(@form, @key) %></p>
|
||||
<p class="text-supporting-red-500 text-sm">{error_tag(@form, @key)}</p>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
@@ -271,9 +271,9 @@ defmodule ClaperWeb.Component.Input do
|
||||
|
||||
~H"""
|
||||
<div class="relative" x-data={"{input: '#{assigns.value}'}"}>
|
||||
<%= label(@form, @key, @name, class: "block text-sm font-medium #{@labelClass}") %>
|
||||
{label(@form, @key, @name, class: "block text-sm font-medium #{@labelClass}")}
|
||||
<div class="mt-1">
|
||||
<%= email_input(@form, @key,
|
||||
{email_input(@form, @key,
|
||||
required: @required,
|
||||
autofocus: @autofocus,
|
||||
placeholder: @placeholder,
|
||||
@@ -284,10 +284,10 @@ defmodule ClaperWeb.Component.Input do
|
||||
"#{@fieldClass} read-only:opacity-50 shadow-base block w-full text-lg focus:ring-primary-500 focus:ring-2 outline-none rounded-md py-2 px-3",
|
||||
"x-model": "input",
|
||||
"x-ref": "input"
|
||||
) %>
|
||||
)}
|
||||
</div>
|
||||
<%= if Keyword.has_key?(@form.errors, @key) do %>
|
||||
<p class="text-supporting-red-500 text-sm"><%= error_tag(@form, @key) %></p>
|
||||
<p class="text-supporting-red-500 text-sm">{error_tag(@form, @key)}</p>
|
||||
<% end %>
|
||||
</div>
|
||||
"""
|
||||
@@ -305,9 +305,9 @@ defmodule ClaperWeb.Component.Input do
|
||||
|
||||
~H"""
|
||||
<div class="relative" x-data={"{input: '#{assigns.value}'}"}>
|
||||
<%= label(@form, @key, @name, class: "block text-sm font-medium #{@labelClass}") %>
|
||||
{label(@form, @key, @name, class: "block text-sm font-medium #{@labelClass}")}
|
||||
<div class="mt-1">
|
||||
<%= password_input(@form, @key,
|
||||
{password_input(@form, @key,
|
||||
required: @required,
|
||||
autofocus: @autofocus,
|
||||
placeholder: @placeholder,
|
||||
@@ -315,10 +315,10 @@ defmodule ClaperWeb.Component.Input do
|
||||
"#{@fieldClass} shadow-base block w-full text-lg focus:ring-primary-500 focus:ring-2 outline-none rounded-md py-2 px-3",
|
||||
"x-model": "input",
|
||||
"x-ref": "input"
|
||||
) %>
|
||||
)}
|
||||
</div>
|
||||
<%= if Keyword.has_key?(@form.errors, @key) do %>
|
||||
<p class="text-supporting-red-500 text-sm"><%= error_tag(@form, @key) %></p>
|
||||
<p class="text-supporting-red-500 text-sm">{error_tag(@form, @key)}</p>
|
||||
<% end %>
|
||||
</div>
|
||||
"""
|
||||
|
||||
@@ -3,18 +3,16 @@ defmodule ClaperWeb.ErrorHelpers do
|
||||
Conveniences for translating and building error messages.
|
||||
"""
|
||||
|
||||
import Phoenix.HTML.Form
|
||||
use PhoenixHTMLHelpers
|
||||
|
||||
@doc """
|
||||
Generates tag for inlined form input errors.
|
||||
"""
|
||||
def error_tag(form, field) do
|
||||
Enum.map(Keyword.get_values(form.errors, field), fn error ->
|
||||
content_tag(:span, translate_error(error),
|
||||
class: "invalid-feedback",
|
||||
phx_feedback_for: input_name(form, field)
|
||||
)
|
||||
errors = if Phoenix.Component.used_input?(form[field]), do: form[field].errors, else: []
|
||||
|
||||
Enum.map(errors, fn error ->
|
||||
content_tag(:span, translate_error(error), class: "invalid-feedback")
|
||||
end)
|
||||
end
|
||||
|
||||
|
||||
4
mix.exs
4
mix.exs
@@ -1,7 +1,7 @@
|
||||
defmodule Claper.MixProject do
|
||||
use Mix.Project
|
||||
|
||||
@version "2.3.3"
|
||||
@version "2.4.0"
|
||||
|
||||
def project do
|
||||
[
|
||||
@@ -87,7 +87,7 @@ defmodule Claper.MixProject do
|
||||
{:phoenix_html, "~> 4.2"},
|
||||
{:phoenix_html_helpers, "~> 1.0"},
|
||||
{:phoenix_live_reload, "~> 1.6", only: :dev},
|
||||
{:phoenix_live_view, "~> 0.20.14"},
|
||||
{:phoenix_live_view, "~> 1.0"},
|
||||
{:phoenix_swoosh, "~> 1.2.1"},
|
||||
{:phoenix_view, "~> 2.0"},
|
||||
{:floki, ">= 0.36.1", only: :test},
|
||||
|
||||
12
mix.lock
12
mix.lock
@@ -9,7 +9,7 @@
|
||||
"cowboy": {:hex, :cowboy, "2.13.0", "09d770dd5f6a22cc60c071f432cd7cb87776164527f205c5a6b0f24ff6b38990", [:make, :rebar3], [{:cowlib, ">= 2.14.0 and < 3.0.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, ">= 1.8.0 and < 3.0.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "e724d3a70995025d654c1992c7b11dbfea95205c047d86ff9bf1cda92ddc5614"},
|
||||
"cowboy_telemetry": {:hex, :cowboy_telemetry, "0.4.0", "f239f68b588efa7707abce16a84d0d2acf3a0f50571f8bb7f56a15865aae820c", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7d98bac1ee4565d31b62d59f8823dfd8356a169e7fcbb83831b8a5397404c9de"},
|
||||
"cowlib": {:hex, :cowlib, "2.15.0", "3c97a318a933962d1c12b96ab7c1d728267d2c523c25a5b57b0f93392b6e9e25", [:make, :rebar3], [], "hexpm", "4f00c879a64b4fe7c8fcb42a4281925e9ffdb928820b03c3ad325a617e857532"},
|
||||
"credo": {:hex, :credo, "1.7.7", "771445037228f763f9b2afd612b6aa2fd8e28432a95dbbc60d8e03ce71ba4446", [:mix], [{:bunt, "~> 0.2.1 or ~> 1.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "8bc87496c9aaacdc3f90f01b7b0582467b69b4bd2441fe8aae3109d843cc2f2e"},
|
||||
"credo": {:hex, :credo, "1.7.12", "9e3c20463de4b5f3f23721527fcaf16722ec815e70ff6c60b86412c695d426c1", [:mix], [{:bunt, "~> 0.2.1 or ~> 1.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "8493d45c656c5427d9c729235b99d498bd133421f3e0a683e5c1b561471291e5"},
|
||||
"csv": {:hex, :csv, "3.2.2", "452f96414b39a176b7c390af6d8b78f15130dc6167fe3b836729131f515d843e", [:mix], [], "hexpm", "cbf256ff74a3fa01d9ec420d07b19c90d410ed9fe5b6d6e1bc7662edf35bc574"},
|
||||
"dart_sass": {:hex, :dart_sass, "0.7.0", "7979e056cb74fd6843e1c72db763cffc7726a9192a657735b7d24c0d9c26a1ce", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}], "hexpm", "4a8e70bca41aa00846398abdf5ad8a64d7907a0f7bf40145cd2e40d5971629f2"},
|
||||
"db_connection": {:hex, :db_connection, "2.8.0", "64fd82cfa6d8e25ec6660cea73e92a4cbc6a18b31343910427b702838c4b33b2", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "008399dae5eee1bf5caa6e86d204dcb44242c82b1ed5e22c881f2c34da201b15"},
|
||||
@@ -25,7 +25,7 @@
|
||||
"expo": {:hex, :expo, "1.1.0", "f7b9ed7fb5745ebe1eeedf3d6f29226c5dd52897ac67c0f8af62a07e661e5c75", [:mix], [], "hexpm", "fbadf93f4700fb44c331362177bdca9eeb8097e8b0ef525c9cc501cb9917c960"},
|
||||
"file_system": {:hex, :file_system, "1.1.0", "08d232062284546c6c34426997dd7ef6ec9f8bbd090eb91780283c9016840e8f", [:mix], [], "hexpm", "bfcf81244f416871f2a2e15c1b515287faa5db9c6bcf290222206d120b3d43f6"},
|
||||
"finch": {:hex, :finch, "0.19.0", "c644641491ea854fc5c1bbaef36bfc764e3f08e7185e1f084e35e0672241b76d", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.6.2 or ~> 1.7", [hex: :mint, repo: "hexpm", optional: false]}, {:nimble_options, "~> 0.4 or ~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 1.1", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "fc5324ce209125d1e2fa0fcd2634601c52a787aff1cd33ee833664a5af4ea2b6"},
|
||||
"floki": {:hex, :floki, "0.36.1", "712b7f2ba19a4d5a47dfe3e74d81876c95bbcbee44fe551f0af3d2a388abb3da", [:mix], [], "hexpm", "21ba57abb8204bcc70c439b423fc0dd9f0286de67dc82773a14b0200ada0995f"},
|
||||
"floki": {:hex, :floki, "0.38.0", "62b642386fa3f2f90713f6e231da0fa3256e41ef1089f83b6ceac7a3fd3abf33", [:mix], [], "hexpm", "a5943ee91e93fb2d635b612caf5508e36d37548e84928463ef9dd986f0d1abd9"},
|
||||
"gen_smtp": {:hex, :gen_smtp, "1.2.0", "9cfc75c72a8821588b9b9fe947ae5ab2aed95a052b81237e0928633a13276fd3", [:rebar3], [{:ranch, ">= 1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "5ee0375680bca8f20c4d85f58c2894441443a743355430ff33a783fe03296779"},
|
||||
"gettext": {:hex, :gettext, "0.26.2", "5978aa7b21fada6deabf1f6341ddba50bc69c999e812211903b169799208f2a8", [:mix], [{:expo, "~> 0.5.1 or ~> 1.0", [hex: :expo, repo: "hexpm", optional: false]}], "hexpm", "aa978504bcf76511efdc22d580ba08e2279caab1066b76bb9aa81c4a1e0a32a5"},
|
||||
"hackney": {:hex, :hackney, "1.24.1", "f5205a125bba6ed4587f9db3cc7c729d11316fa8f215d3e57ed1c067a9703fa9", [:rebar3], [{:certifi, "~> 2.15.0", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "~> 6.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "~> 1.0.0", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~> 1.4", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.4.1", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "~> 1.1.0", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}, {:unicode_util_compat, "~> 0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "f4a7392a0b53d8bbc3eb855bdcc919cd677358e65b2afd3840b5b3690c4c8a39"},
|
||||
@@ -36,7 +36,7 @@
|
||||
"httpoison": {:hex, :httpoison, "2.2.1", "87b7ed6d95db0389f7df02779644171d7319d319178f6680438167d7b69b1f3d", [:mix], [{:hackney, "~> 1.17", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "51364e6d2f429d80e14fe4b5f8e39719cacd03eb3f9a9286e61e216feac2d2df"},
|
||||
"idna": {:hex, :idna, "6.1.1", "8a63070e9f7d0c62eb9d9fcb360a7de382448200fbbd1b106cc96d3d8099df8d", [:rebar3], [{:unicode_util_compat, "~> 0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "92376eb7894412ed19ac475e4a86f7b413c1b9fbb5bd16dccd57934157944cea"},
|
||||
"jason": {:hex, :jason, "1.4.4", "b9226785a9aa77b6857ca22832cffa5d5011a667207eb2a0ad56adb5db443b8a", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "c5eb0cab91f094599f94d55bc63409236a8ec69a21a67814529e8d5f6cc90b3b"},
|
||||
"joken": {:hex, :joken, "2.6.1", "2ca3d8d7f83bf7196296a3d9b2ecda421a404634bfc618159981a960020480a1", [:mix], [{:jose, "~> 1.11.9", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "ab26122c400b3d254ce7d86ed066d6afad27e70416df947cdcb01e13a7382e68"},
|
||||
"joken": {:hex, :joken, "2.6.2", "5daaf82259ca603af4f0b065475099ada1b2b849ff140ccd37f4b6828ca6892a", [:mix], [{:jose, "~> 1.11.10", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "5134b5b0a6e37494e46dbf9e4dad53808e5e787904b7c73972651b51cce3d72b"},
|
||||
"jose": {:hex, :jose, "1.11.10", "a903f5227417bd2a08c8a00a0cbcc458118be84480955e8d251297a425723f83", [:mix, :rebar3], [], "hexpm", "0d6cd36ff8ba174db29148fc112b5842186b68a90ce9fc2b3ec3afe76593e614"},
|
||||
"libcluster": {:hex, :libcluster, "3.5.0", "5ee4cfde4bdf32b2fef271e33ce3241e89509f4344f6c6a8d4069937484866ba", [:mix], [{:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.3", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ebf6561fcedd765a4cd43b4b8c04b1c87f4177b5fb3cbdfe40a780499d72f743"},
|
||||
"lti_1p3": {:hex, :lti_1p3, "0.6.0", "e896c56b0ae067b768fb5ce2c44db305b6d7bbc213fafd1bbb7da586629c6d9f", [:mix], [{:httpoison, "~> 2.0", [hex: :httpoison, repo: "hexpm", optional: false]}, {:jason, "~> 1.3", [hex: :jason, repo: "hexpm", optional: false]}, {:joken, "~> 2.2.0", [hex: :joken, repo: "hexpm", optional: false]}, {:timex, "~> 3.5", [hex: :timex, repo: "hexpm", optional: false]}, {:uuid, "~> 1.1", [hex: :uuid, repo: "hexpm", optional: false]}], "hexpm", "7c142ae8027913bbaa2267a28f448e734b1c5b2563e2aee2b1481632b84e35b3"},
|
||||
@@ -49,7 +49,7 @@
|
||||
"mime": {:hex, :mime, "2.0.7", "b8d739037be7cd402aee1ba0306edfdef982687ee7e9859bee6198c1e7e2f128", [:mix], [], "hexpm", "6171188e399ee16023ffc5b76ce445eb6d9672e2e241d2df6050f3c771e80ccd"},
|
||||
"mimerl": {:hex, :mimerl, "1.4.0", "3882a5ca67fbbe7117ba8947f27643557adec38fa2307490c4c4207624cb213b", [:rebar3], [], "hexpm", "13af15f9f68c65884ecca3a3891d50a7b57d82152792f3e19d88650aa126b144"},
|
||||
"mint": {:hex, :mint, "1.7.1", "113fdb2b2f3b59e47c7955971854641c61f378549d73e829e1768de90fc1abf1", [:mix], [{:castore, "~> 0.1.0 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:hpax, "~> 0.1.1 or ~> 0.2.0 or ~> 1.0", [hex: :hpax, repo: "hexpm", optional: false]}], "hexpm", "fceba0a4d0f24301ddee3024ae116df1c3f4bb7a563a731f45fdfeb9d39a231b"},
|
||||
"mogrify": {:hex, :mogrify, "0.9.2", "b360984adea7dd6a55f18028e6327973c58de7f548fdb86c9859848aa904d5b0", [:mix], [], "hexpm", "c18d10fd70ca20e2585301616c89f6e4f7159d92efc9cc8ee579e00c886f699d"},
|
||||
"mogrify": {:hex, :mogrify, "0.9.3", "238c782f00271dace01369ad35ae2e9dd020feee3443b9299ea5ea6bed559841", [:mix], [], "hexpm", "0189b1e1de27455f2b9ae8cf88239cefd23d38de9276eb5add7159aea51731e6"},
|
||||
"mua": {:hex, :mua, "0.2.4", "a9172ab0a1ac8732cf2699d739ceac3febcb9b4ffc540260ad2e32c0b6632af9", [:mix], [{:castore, "~> 0.1.0 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}], "hexpm", "e7e4dacd5ad65f13e3542772e74a159c00bd2d5579e729e9bb72d2c73a266fb7"},
|
||||
"nimble_options": {:hex, :nimble_options, "1.1.1", "e3a492d54d85fc3fd7c5baf411d9d2852922f66e69476317787a7b2bb000a61b", [:mix], [], "hexpm", "821b2470ca9442c4b6984882fe9bb0389371b8ddec4d45a9504f00a66f650b44"},
|
||||
"nimble_parsec": {:hex, :nimble_parsec, "1.4.2", "8efba0122db06df95bfaa78f791344a89352ba04baedd3849593bfce4d0dc1c6", [:mix], [], "hexpm", "4b21398942dda052b403bbe1da991ccd03a053668d147d53fb8c4e0efe09c973"},
|
||||
@@ -61,9 +61,9 @@
|
||||
"phoenix_ecto": {:hex, :phoenix_ecto, "4.6.5", "c4ef322acd15a574a8b1a08eff0ee0a85e73096b53ce1403b6563709f15e1cea", [:mix], [{:ecto, "~> 3.5", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.1", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}], "hexpm", "26ec3208eef407f31b748cadd044045c6fd485fbff168e35963d2f9dfff28d4b"},
|
||||
"phoenix_html": {:hex, :phoenix_html, "4.2.1", "35279e2a39140068fc03f8874408d58eef734e488fc142153f055c5454fd1c08", [:mix], [], "hexpm", "cff108100ae2715dd959ae8f2a8cef8e20b593f8dfd031c9cba92702cf23e053"},
|
||||
"phoenix_html_helpers": {:hex, :phoenix_html_helpers, "1.0.1", "7eed85c52eff80a179391036931791ee5d2f713d76a81d0d2c6ebafe1e11e5ec", [:mix], [{:phoenix_html, "~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "cffd2385d1fa4f78b04432df69ab8da63dc5cf63e07b713a4dcf36a3740e3090"},
|
||||
"phoenix_live_dashboard": {:hex, :phoenix_live_dashboard, "0.8.3", "7ff51c9b6609470f681fbea20578dede0e548302b0c8bdf338b5a753a4f045bf", [:mix], [{:ecto, "~> 3.6.2 or ~> 3.7", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_mysql_extras, "~> 0.5", [hex: :ecto_mysql_extras, repo: "hexpm", optional: true]}, {:ecto_psql_extras, "~> 0.7", [hex: :ecto_psql_extras, repo: "hexpm", optional: true]}, {:ecto_sqlite3_extras, "~> 1.1.7 or ~> 1.2.0", [hex: :ecto_sqlite3_extras, repo: "hexpm", optional: true]}, {:mime, "~> 1.6 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 0.19 or ~> 1.0", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6 or ~> 1.0", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "f9470a0a8bae4f56430a23d42f977b5a6205fdba6559d76f932b876bfaec652d"},
|
||||
"phoenix_live_dashboard": {:hex, :phoenix_live_dashboard, "0.8.7", "405880012cb4b706f26dd1c6349125bfc903fb9e44d1ea668adaf4e04d4884b7", [:mix], [{:ecto, "~> 3.6.2 or ~> 3.7", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_mysql_extras, "~> 0.5", [hex: :ecto_mysql_extras, repo: "hexpm", optional: true]}, {:ecto_psql_extras, "~> 0.7", [hex: :ecto_psql_extras, repo: "hexpm", optional: true]}, {:ecto_sqlite3_extras, "~> 1.1.7 or ~> 1.2.0", [hex: :ecto_sqlite3_extras, repo: "hexpm", optional: true]}, {:mime, "~> 1.6 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 0.19 or ~> 1.0", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6 or ~> 1.0", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "3a8625cab39ec261d48a13b7468dc619c0ede099601b084e343968309bd4d7d7"},
|
||||
"phoenix_live_reload": {:hex, :phoenix_live_reload, "1.6.0", "2791fac0e2776b640192308cc90c0dbcf67843ad51387ed4ecae2038263d708d", [:mix], [{:file_system, "~> 0.2.10 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "b3a1fa036d7eb2f956774eda7a7638cf5123f8f2175aca6d6420a7f95e598e1c"},
|
||||
"phoenix_live_view": {:hex, :phoenix_live_view, "0.20.14", "70fa101aa0539e81bed4238777498f6215e9dda3461bdaa067cad6908110c364", [:mix], [{:floki, "~> 0.36", [hex: :floki, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6.15 or ~> 1.7.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.3 or ~> 4.0 or ~> 4.1", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.15", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "82f6d006c5264f979ed5eb75593d808bbe39020f20df2e78426f4f2d570e2402"},
|
||||
"phoenix_live_view": {:hex, :phoenix_live_view, "1.0.17", "beeb16d83a7d3760f7ad463df94e83b087577665d2acc0bf2987cd7d9778068f", [:mix], [{:floki, "~> 0.36", [hex: :floki, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6.15 or ~> 1.7.0 or ~> 1.8.0-rc", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.3 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.15", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "a4ca05c1eb6922c4d07a508a75bfa12c45e5f4d8f77ae83283465f02c53741e1"},
|
||||
"phoenix_pubsub": {:hex, :phoenix_pubsub, "2.1.3", "3168d78ba41835aecad272d5e8cd51aa87a7ac9eb836eabc42f6e57538e3731d", [:mix], [], "hexpm", "bba06bc1dcfd8cb086759f0edc94a8ba2bc8896d5331a1e2c2902bf8e36ee502"},
|
||||
"phoenix_swoosh": {:hex, :phoenix_swoosh, "1.2.1", "b74ccaa8046fbc388a62134360ee7d9742d5a8ae74063f34eb050279de7a99e1", [:mix], [{:finch, "~> 0.8", [hex: :finch, repo: "hexpm", optional: true]}, {:hackney, "~> 1.10", [hex: :hackney, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6", [hex: :phoenix, repo: "hexpm", optional: true]}, {:phoenix_html, "~> 3.0 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_view, "~> 1.0 or ~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: false]}, {:swoosh, "~> 1.5", [hex: :swoosh, repo: "hexpm", optional: false]}], "hexpm", "4000eeba3f9d7d1a6bf56d2bd56733d5cadf41a7f0d8ffe5bb67e7d667e204a2"},
|
||||
"phoenix_template": {:hex, :phoenix_template, "1.0.4", "e2092c132f3b5e5b2d49c96695342eb36d0ed514c5b252a77048d5969330d639", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "2c0c81f0e5c6753faf5cca2f229c9709919aba34fab866d3bc05060c9c444206"},
|
||||
|
||||
Reference in New Issue
Block a user