mirror of
https://github.com/ClaperCo/Claper.git
synced 2026-08-29 10:09:08 +02:00
Add slide reordering with drag-and-drop
This commit is contained in:
@@ -407,6 +407,57 @@ Hooks.Manager = {
|
||||
this.manager.update();
|
||||
},
|
||||
};
|
||||
Hooks.SlideSortable = {
|
||||
mounted() {
|
||||
this.from = null;
|
||||
|
||||
this.el.addEventListener("dragstart", (e) => {
|
||||
const item = e.target.closest("[data-index]");
|
||||
if (!item) return;
|
||||
this.from = parseInt(item.dataset.index);
|
||||
e.dataTransfer.effectAllowed = "move";
|
||||
e.dataTransfer.setData("text/plain", item.dataset.index);
|
||||
setTimeout(() => item.classList.add("opacity-40"), 0);
|
||||
});
|
||||
|
||||
this.el.addEventListener("dragover", (e) => {
|
||||
if (this.from === null) return;
|
||||
e.preventDefault();
|
||||
e.dataTransfer.dropEffect = "move";
|
||||
const item = e.target.closest("[data-index]");
|
||||
this.clearDropTarget();
|
||||
if (item && parseInt(item.dataset.index) !== this.from) {
|
||||
item.classList.add("ring-2", "ring-primary-500");
|
||||
}
|
||||
});
|
||||
|
||||
this.el.addEventListener("drop", (e) => {
|
||||
e.preventDefault();
|
||||
const item = e.target.closest("[data-index]");
|
||||
if (item && this.from !== null) {
|
||||
const to = parseInt(item.dataset.index);
|
||||
if (to !== this.from) {
|
||||
this.pushEvent("reorder-slides", { from: this.from, to: to });
|
||||
}
|
||||
}
|
||||
this.reset();
|
||||
});
|
||||
|
||||
this.el.addEventListener("dragend", () => this.reset());
|
||||
},
|
||||
clearDropTarget() {
|
||||
this.el
|
||||
.querySelectorAll("[data-index]")
|
||||
.forEach((n) => n.classList.remove("ring-2", "ring-primary-500"));
|
||||
},
|
||||
reset() {
|
||||
this.from = null;
|
||||
this.clearDropTarget();
|
||||
this.el
|
||||
.querySelectorAll("[data-index]")
|
||||
.forEach((n) => n.classList.remove("opacity-40"));
|
||||
},
|
||||
};
|
||||
Hooks.OpenPresenter = {
|
||||
open(e) {
|
||||
e.preventDefault();
|
||||
|
||||
@@ -57,12 +57,12 @@ defmodule Claper.Presentations do
|
||||
[]
|
||||
|
||||
presentation ->
|
||||
get_slide_urls(hash, presentation.length)
|
||||
get_slide_urls(presentation)
|
||||
end
|
||||
end
|
||||
|
||||
def get_slide_urls(%PresentationFile{} = presentation) do
|
||||
get_slide_urls(presentation.hash, presentation.length)
|
||||
get_slide_urls(presentation.hash, presentation.length, presentation.slide_order)
|
||||
end
|
||||
|
||||
@doc """
|
||||
@@ -94,25 +94,25 @@ defmodule Claper.Presentations do
|
||||
|
||||
@doc """
|
||||
Returns a list of JPG slide URLs for a given presentation `hash` and
|
||||
`length`. See also `get_slide_urls/1`.
|
||||
`length`, optionally reordered by `slide_order`. See also `get_slide_urls/1`.
|
||||
"""
|
||||
def get_slide_urls(hash, length)
|
||||
def get_slide_urls(hash, length, slide_order \\ nil)
|
||||
|
||||
def get_slide_urls(nil, _), do: []
|
||||
def get_slide_urls(nil, _, _), do: []
|
||||
|
||||
def get_slide_urls(hash, length) when is_binary(hash) and is_integer(length) do
|
||||
def get_slide_urls(hash, length, slide_order) when is_binary(hash) and is_integer(length) do
|
||||
config = Application.get_env(:claper, :presentations)
|
||||
|
||||
case Keyword.fetch!(config, :storage) do
|
||||
"local" ->
|
||||
for index <- 1..length do
|
||||
for index <- slide_indexes(length, slide_order) do
|
||||
"/uploads/#{hash}/#{index}.jpg"
|
||||
end
|
||||
|
||||
"s3" ->
|
||||
base_url = Keyword.fetch!(config, :s3_public_url)
|
||||
|
||||
for index <- 1..length do
|
||||
for index <- slide_indexes(length, slide_order) do
|
||||
base_url <> "/presentations/#{hash}/#{index}.jpg"
|
||||
end
|
||||
|
||||
@@ -131,23 +131,24 @@ defmodule Claper.Presentations do
|
||||
def get_slide_thumbnail_urls(%PresentationFile{length: nil}), do: []
|
||||
def get_slide_thumbnail_urls(%PresentationFile{length: 0}), do: []
|
||||
|
||||
def get_slide_thumbnail_urls(%PresentationFile{hash: hash, length: length}) do
|
||||
get_slide_thumbnail_urls(hash, length)
|
||||
def get_slide_thumbnail_urls(%PresentationFile{} = presentation) do
|
||||
get_slide_thumbnail_urls(presentation.hash, presentation.length, presentation.slide_order)
|
||||
end
|
||||
|
||||
def get_slide_thumbnail_urls(hash, length) when is_binary(hash) and is_integer(length) do
|
||||
def get_slide_thumbnail_urls(hash, length, slide_order \\ nil)
|
||||
when is_binary(hash) and is_integer(length) do
|
||||
config = Application.get_env(:claper, :presentations)
|
||||
|
||||
case Keyword.fetch!(config, :storage) do
|
||||
"local" ->
|
||||
for index <- 1..length do
|
||||
for index <- slide_indexes(length, slide_order) do
|
||||
"/uploads/#{hash}/thumbs/#{index}.jpg"
|
||||
end
|
||||
|
||||
"s3" ->
|
||||
base_url = Keyword.fetch!(config, :s3_public_url)
|
||||
|
||||
for index <- 1..length do
|
||||
for index <- slide_indexes(length, slide_order) do
|
||||
base_url <> "/presentations/#{hash}/thumbs/#{index}.jpg"
|
||||
end
|
||||
|
||||
@@ -156,6 +157,15 @@ defmodule Claper.Presentations do
|
||||
end
|
||||
end
|
||||
|
||||
# Display order as a list of 1-based original slide file indexes. A stored
|
||||
# `slide_order` is only honored when it matches the slide count, so a stale
|
||||
# order (e.g. from before a re-upload) falls back to the natural order.
|
||||
defp slide_indexes(count, slide_order)
|
||||
when is_list(slide_order) and length(slide_order) == count,
|
||||
do: slide_order
|
||||
|
||||
defp slide_indexes(count, _slide_order), do: Enum.to_list(1..count//1)
|
||||
|
||||
@doc """
|
||||
Returns true when a presentation has slides but no generated thumbnails.
|
||||
"""
|
||||
@@ -248,6 +258,111 @@ defmodule Claper.Presentations do
|
||||
|> broadcast(:state_updated)
|
||||
end
|
||||
|
||||
@interaction_schemas [
|
||||
Claper.Polls.Poll,
|
||||
Claper.Forms.Form,
|
||||
Claper.Embeds.Embed,
|
||||
Claper.Quizzes.Quiz
|
||||
]
|
||||
|
||||
@doc """
|
||||
Moves the slide displayed at position `from` to position `to` (both 0-based
|
||||
display positions).
|
||||
|
||||
Slide files are never renamed (a hash directory can be shared by duplicated
|
||||
events); instead the per-presentation `slide_order` permutation is updated.
|
||||
Interactions (polls, forms, embeds, quizzes) and the current presentation
|
||||
state position are remapped so they stay attached to their slide content.
|
||||
|
||||
Returns `{:ok, presentation_file, presentation_state}` or
|
||||
`{:error, :invalid_position}`.
|
||||
"""
|
||||
def reorder_slides(%PresentationFile{} = presentation_file, from, to)
|
||||
when is_integer(from) and is_integer(to) do
|
||||
count = presentation_file.length || 0
|
||||
|
||||
if from == to or from < 0 or to < 0 or from >= count or to >= count do
|
||||
{:error, :invalid_position}
|
||||
else
|
||||
do_reorder_slides(presentation_file, from, to)
|
||||
end
|
||||
end
|
||||
|
||||
defp do_reorder_slides(presentation_file, from, to) do
|
||||
{moved, rest} =
|
||||
presentation_file.length
|
||||
|> slide_indexes(presentation_file.slide_order)
|
||||
|> List.pop_at(from)
|
||||
|
||||
new_order = List.insert_at(rest, to, moved)
|
||||
|
||||
Repo.transaction(fn ->
|
||||
presentation_file =
|
||||
presentation_file
|
||||
|> PresentationFile.changeset(%{slide_order: new_order})
|
||||
|> Repo.update!()
|
||||
|
||||
Enum.each(@interaction_schemas, fn schema ->
|
||||
remap_interaction_positions(schema, presentation_file.id, from, to)
|
||||
end)
|
||||
|
||||
state = Repo.get_by(PresentationState, presentation_file_id: presentation_file.id)
|
||||
new_position = state && remap_position(state.position, from, to)
|
||||
position_changed = state && new_position != state.position
|
||||
|
||||
state =
|
||||
if position_changed do
|
||||
state
|
||||
|> PresentationState.changeset(%{position: new_position})
|
||||
|> Repo.update!()
|
||||
else
|
||||
state
|
||||
end
|
||||
|
||||
{presentation_file, state, position_changed}
|
||||
end)
|
||||
|> case do
|
||||
{:ok, {presentation_file, state, position_changed}} ->
|
||||
if position_changed, do: broadcast({:ok, state}, :state_updated)
|
||||
{:ok, presentation_file, state}
|
||||
|
||||
{:error, reason} ->
|
||||
{:error, reason}
|
||||
end
|
||||
end
|
||||
|
||||
# Shifts the `position` column of every interaction so it follows its slide
|
||||
# content. Interactions on the moved slide are parked at -1 first to avoid
|
||||
# colliding with the shifted range.
|
||||
defp remap_interaction_positions(schema, presentation_file_id, from, to) do
|
||||
base = from(i in schema, where: i.presentation_file_id == ^presentation_file_id)
|
||||
|
||||
base |> where([i], i.position == ^from) |> Repo.update_all(set: [position: -1])
|
||||
|
||||
if from < to do
|
||||
base
|
||||
|> where([i], i.position > ^from and i.position <= ^to)
|
||||
|> Repo.update_all(inc: [position: -1])
|
||||
else
|
||||
base
|
||||
|> where([i], i.position >= ^to and i.position < ^from)
|
||||
|> Repo.update_all(inc: [position: 1])
|
||||
end
|
||||
|
||||
base |> where([i], i.position == -1) |> Repo.update_all(set: [position: to])
|
||||
end
|
||||
|
||||
defp remap_position(nil, _from, _to), do: nil
|
||||
defp remap_position(position, from, to) when position == from, do: to
|
||||
|
||||
defp remap_position(position, from, to) when from < to and position > from and position <= to,
|
||||
do: position - 1
|
||||
|
||||
defp remap_position(position, from, to) when from > to and position >= to and position < from,
|
||||
do: position + 1
|
||||
|
||||
defp remap_position(position, _from, _to), do: position
|
||||
|
||||
defp broadcast({:error, _reason} = error, _state), do: error
|
||||
|
||||
defp broadcast({:ok, state}, event) do
|
||||
|
||||
@@ -7,6 +7,7 @@ defmodule Claper.Presentations.PresentationFile do
|
||||
hash: String.t() | nil,
|
||||
length: integer() | nil,
|
||||
status: String.t() | nil,
|
||||
slide_order: [integer()] | nil,
|
||||
event_id: integer() | nil,
|
||||
polls: [Claper.Polls.Poll.t()] | nil,
|
||||
forms: [Claper.Forms.Form.t()] | nil,
|
||||
@@ -21,6 +22,7 @@ defmodule Claper.Presentations.PresentationFile do
|
||||
field :hash, :string
|
||||
field :length, :integer
|
||||
field :status, :string
|
||||
field :slide_order, {:array, :integer}
|
||||
|
||||
belongs_to :event, Claper.Events.Event
|
||||
has_many :polls, Claper.Polls.Poll
|
||||
@@ -37,7 +39,7 @@ defmodule Claper.Presentations.PresentationFile do
|
||||
@doc false
|
||||
def changeset(presentation_file, attrs) do
|
||||
presentation_file
|
||||
|> cast(attrs, [:length, :status, :hash, :event_id])
|
||||
|> cast(attrs, [:length, :status, :hash, :event_id, :slide_order])
|
||||
|> cast_assoc(:presentation_state)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -256,7 +256,8 @@ defmodule Claper.Tasks.Converter do
|
||||
Claper.Presentations.update_presentation_file(presentation, %{
|
||||
"hash" => "#{hash}",
|
||||
"length" => length,
|
||||
"status" => "done"
|
||||
"status" => "done",
|
||||
"slide_order" => nil
|
||||
}) do
|
||||
if get_presentation_storage() != "local", do: File.rm_rf!(path)
|
||||
|
||||
|
||||
@@ -427,6 +427,32 @@ defmodule ClaperWeb.EventLive.Manage do
|
||||
|> interactions_at_position(page)}
|
||||
end
|
||||
|
||||
@impl true
|
||||
def handle_event(
|
||||
"reorder-slides",
|
||||
%{"from" => from, "to" => to},
|
||||
%{assigns: %{event: event, state: state}} = socket
|
||||
)
|
||||
when is_integer(from) and is_integer(to) and from != to do
|
||||
case Presentations.reorder_slides(event.presentation_file, from, to) do
|
||||
{:ok, _presentation_file, new_state} ->
|
||||
if new_state && new_state.position != state.position do
|
||||
Phoenix.PubSub.broadcast(
|
||||
Claper.PubSub,
|
||||
"event:#{event.uuid}",
|
||||
{:page_changed, new_state.position}
|
||||
)
|
||||
end
|
||||
|
||||
socket = refresh_event(socket)
|
||||
|
||||
{:noreply, socket |> interactions_at_position(socket.assigns.state.position)}
|
||||
|
||||
{:error, _reason} ->
|
||||
{:noreply, socket |> put_flash(:error, gettext("Could not reorder slides"))}
|
||||
end
|
||||
end
|
||||
|
||||
@impl true
|
||||
def handle_event(
|
||||
"regenerate-thumbnails",
|
||||
|
||||
@@ -40,13 +40,15 @@ defmodule ClaperWeb.EventLive.ManageSlideSidebarComponent do
|
||||
|
||||
<span class="font-bold text-sm text-[#140553]">{gettext("Content")}</span>
|
||||
</div>
|
||||
<div class="flex-1 overflow-y-auto p-3 space-y-2">
|
||||
<div id="slide-sortable" phx-hook="SlideSortable" class="flex-1 overflow-y-auto p-3 space-y-2">
|
||||
<button
|
||||
:for={{src, index} <- @thumbnail_urls |> Enum.with_index(0)}
|
||||
id={"slide-thumb-#{index}"}
|
||||
draggable="true"
|
||||
data-index={index}
|
||||
phx-click="current-page"
|
||||
phx-value-page={index}
|
||||
class={"group flex items-start gap-x-1.5 w-full rounded-lg p-1 transition-all hover:bg-gray-200 #{if @current_position == index, do: "bg-primary-50"}"}
|
||||
class={"group flex items-start gap-x-1.5 w-full rounded-lg p-1 transition-all cursor-grab active:cursor-grabbing hover:bg-gray-200 #{if @current_position == index, do: "bg-primary-50"}"}
|
||||
>
|
||||
<span class={"flex-shrink-0 w-5 text-base font-semibold #{if @current_position == index, do: "text-primary-600", else: "text-gray-500"}"}>
|
||||
{index + 1}
|
||||
@@ -54,6 +56,7 @@ defmodule ClaperWeb.EventLive.ManageSlideSidebarComponent do
|
||||
<div class={"relative w-28 aspect-video rounded-md overflow-hidden border-2 transition-all #{if @current_position == index, do: "border-primary-500 shadow-md", else: "border-transparent opacity-60 group-hover:opacity-100"}"}>
|
||||
<img
|
||||
src={src}
|
||||
draggable="false"
|
||||
loading="lazy"
|
||||
decoding="async"
|
||||
class="w-full h-full object-cover"
|
||||
|
||||
@@ -19,7 +19,7 @@ msgstr "Einstellungen"
|
||||
#: lib/claper_web/live/admin_live/user_live.html.heex:41
|
||||
#: lib/claper_web/live/admin_live/user_live.html.heex:104
|
||||
#: lib/claper_web/live/admin_live/user_live/form_component.ex:18
|
||||
#: lib/claper_web/live/event_live/manage.ex:1092
|
||||
#: lib/claper_web/live/event_live/manage.ex:1118
|
||||
#: lib/claper_web/live/form_live/form_component.html.heex:32
|
||||
#: lib/claper_web/live/user_settings_live/show.html.heex:18
|
||||
#: lib/claper_web/templates/user_registration/new.html.heex:63
|
||||
@@ -691,7 +691,7 @@ msgstr "Formular"
|
||||
#: lib/claper_web/live/admin_live/oidc_provider_live.html.heex:74
|
||||
#: lib/claper_web/live/admin_live/oidc_provider_live.html.heex:234
|
||||
#: lib/claper_web/live/admin_live/oidc_provider_live/form_component.ex:24
|
||||
#: lib/claper_web/live/event_live/manage.ex:1091
|
||||
#: lib/claper_web/live/event_live/manage.ex:1117
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Name"
|
||||
msgstr "Name"
|
||||
@@ -1336,12 +1336,12 @@ msgstr "Laden Sie die Seite, auf die Sie zugreifen möchten, neu (senden Sie kei
|
||||
msgid "Try logging in again"
|
||||
msgstr "Versuchen Sie, sich erneut anzumelden"
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:1064
|
||||
#: lib/claper_web/live/event_live/manage.ex:1090
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "No"
|
||||
msgstr "Nein"
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:1064
|
||||
#: lib/claper_web/live/event_live/manage.ex:1090
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Yes"
|
||||
msgstr "Ja"
|
||||
@@ -2666,10 +2666,10 @@ msgstr "Ressourcen-ID"
|
||||
msgid "Resource Type"
|
||||
msgstr "Antworttyp"
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:1072
|
||||
#: lib/claper_web/live/event_live/manage.ex:1115
|
||||
#: lib/claper_web/live/event_live/manage.ex:1131
|
||||
#: lib/claper_web/live/event_live/manage.ex:1173
|
||||
#: lib/claper_web/live/event_live/manage.ex:1098
|
||||
#: lib/claper_web/live/event_live/manage.ex:1141
|
||||
#: lib/claper_web/live/event_live/manage.ex:1157
|
||||
#: lib/claper_web/live/event_live/manage.ex:1199
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Resource not found"
|
||||
msgstr "Ressource nicht gefunden"
|
||||
@@ -2907,7 +2907,7 @@ msgstr "Melden Sie sich an, um Ihre interaktiven Sitzungen zu starten oder zu ve
|
||||
msgid "Could not regenerate thumbnails"
|
||||
msgstr "Miniaturbilder konnten nicht neu erstellt werden"
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:461
|
||||
#: lib/claper_web/live/event_live/manage.ex:487
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Could not start thumbnail regeneration"
|
||||
msgstr "Miniaturbilderstellung konnte nicht gestartet werden"
|
||||
@@ -2937,7 +2937,7 @@ msgstr "Miniaturbilder neu erstellen"
|
||||
msgid "Regenerating..."
|
||||
msgstr "Wird neu erstellt..."
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:458
|
||||
#: lib/claper_web/live/event_live/manage.ex:484
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Thumbnail regeneration started"
|
||||
msgstr "Miniaturbilderstellung gestartet"
|
||||
@@ -3245,7 +3245,7 @@ msgstr ""
|
||||
msgid "Transcription deleted"
|
||||
msgstr ""
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:826
|
||||
#: lib/claper_web/live/event_live/manage.ex:852
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Transcription has been disabled by the administrator"
|
||||
msgstr ""
|
||||
@@ -3310,3 +3310,8 @@ msgstr "Unbegrenzt"
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Powered by"
|
||||
msgstr "Bereitgestellt von"
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:452
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Could not reorder slides"
|
||||
msgstr ""
|
||||
|
||||
@@ -21,7 +21,7 @@ msgstr ""
|
||||
#: lib/claper_web/live/admin_live/user_live.html.heex:41
|
||||
#: lib/claper_web/live/admin_live/user_live.html.heex:104
|
||||
#: lib/claper_web/live/admin_live/user_live/form_component.ex:18
|
||||
#: lib/claper_web/live/event_live/manage.ex:1092
|
||||
#: lib/claper_web/live/event_live/manage.ex:1118
|
||||
#: lib/claper_web/live/form_live/form_component.html.heex:32
|
||||
#: lib/claper_web/live/user_settings_live/show.html.heex:18
|
||||
#: lib/claper_web/templates/user_registration/new.html.heex:63
|
||||
@@ -693,7 +693,7 @@ msgstr ""
|
||||
#: lib/claper_web/live/admin_live/oidc_provider_live.html.heex:74
|
||||
#: lib/claper_web/live/admin_live/oidc_provider_live.html.heex:234
|
||||
#: lib/claper_web/live/admin_live/oidc_provider_live/form_component.ex:24
|
||||
#: lib/claper_web/live/event_live/manage.ex:1091
|
||||
#: lib/claper_web/live/event_live/manage.ex:1117
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
@@ -1338,12 +1338,12 @@ msgstr ""
|
||||
msgid "Try logging in again"
|
||||
msgstr ""
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:1064
|
||||
#: lib/claper_web/live/event_live/manage.ex:1090
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "No"
|
||||
msgstr ""
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:1064
|
||||
#: lib/claper_web/live/event_live/manage.ex:1090
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Yes"
|
||||
msgstr ""
|
||||
@@ -2668,10 +2668,10 @@ msgstr ""
|
||||
msgid "Resource Type"
|
||||
msgstr ""
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:1072
|
||||
#: lib/claper_web/live/event_live/manage.ex:1115
|
||||
#: lib/claper_web/live/event_live/manage.ex:1131
|
||||
#: lib/claper_web/live/event_live/manage.ex:1173
|
||||
#: lib/claper_web/live/event_live/manage.ex:1098
|
||||
#: lib/claper_web/live/event_live/manage.ex:1141
|
||||
#: lib/claper_web/live/event_live/manage.ex:1157
|
||||
#: lib/claper_web/live/event_live/manage.ex:1199
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Resource not found"
|
||||
msgstr ""
|
||||
@@ -2909,7 +2909,7 @@ msgstr ""
|
||||
msgid "Could not regenerate thumbnails"
|
||||
msgstr ""
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:461
|
||||
#: lib/claper_web/live/event_live/manage.ex:487
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Could not start thumbnail regeneration"
|
||||
msgstr ""
|
||||
@@ -2939,7 +2939,7 @@ msgstr ""
|
||||
msgid "Regenerating..."
|
||||
msgstr ""
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:458
|
||||
#: lib/claper_web/live/event_live/manage.ex:484
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Thumbnail regeneration started"
|
||||
msgstr ""
|
||||
@@ -3247,7 +3247,7 @@ msgstr ""
|
||||
msgid "Transcription deleted"
|
||||
msgstr ""
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:826
|
||||
#: lib/claper_web/live/event_live/manage.ex:852
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Transcription has been disabled by the administrator"
|
||||
msgstr ""
|
||||
@@ -3312,3 +3312,8 @@ msgstr ""
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Powered by"
|
||||
msgstr ""
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:452
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Could not reorder slides"
|
||||
msgstr ""
|
||||
|
||||
@@ -19,7 +19,7 @@ msgstr ""
|
||||
#: lib/claper_web/live/admin_live/user_live.html.heex:41
|
||||
#: lib/claper_web/live/admin_live/user_live.html.heex:104
|
||||
#: lib/claper_web/live/admin_live/user_live/form_component.ex:18
|
||||
#: lib/claper_web/live/event_live/manage.ex:1092
|
||||
#: lib/claper_web/live/event_live/manage.ex:1118
|
||||
#: lib/claper_web/live/form_live/form_component.html.heex:32
|
||||
#: lib/claper_web/live/user_settings_live/show.html.heex:18
|
||||
#: lib/claper_web/templates/user_registration/new.html.heex:63
|
||||
@@ -691,7 +691,7 @@ msgstr ""
|
||||
#: lib/claper_web/live/admin_live/oidc_provider_live.html.heex:74
|
||||
#: lib/claper_web/live/admin_live/oidc_provider_live.html.heex:234
|
||||
#: lib/claper_web/live/admin_live/oidc_provider_live/form_component.ex:24
|
||||
#: lib/claper_web/live/event_live/manage.ex:1091
|
||||
#: lib/claper_web/live/event_live/manage.ex:1117
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
@@ -1336,12 +1336,12 @@ msgstr ""
|
||||
msgid "Try logging in again"
|
||||
msgstr ""
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:1064
|
||||
#: lib/claper_web/live/event_live/manage.ex:1090
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "No"
|
||||
msgstr ""
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:1064
|
||||
#: lib/claper_web/live/event_live/manage.ex:1090
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Yes"
|
||||
msgstr ""
|
||||
@@ -2666,10 +2666,10 @@ msgstr ""
|
||||
msgid "Resource Type"
|
||||
msgstr ""
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:1072
|
||||
#: lib/claper_web/live/event_live/manage.ex:1115
|
||||
#: lib/claper_web/live/event_live/manage.ex:1131
|
||||
#: lib/claper_web/live/event_live/manage.ex:1173
|
||||
#: lib/claper_web/live/event_live/manage.ex:1098
|
||||
#: lib/claper_web/live/event_live/manage.ex:1141
|
||||
#: lib/claper_web/live/event_live/manage.ex:1157
|
||||
#: lib/claper_web/live/event_live/manage.ex:1199
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Resource not found"
|
||||
msgstr ""
|
||||
@@ -2907,7 +2907,7 @@ msgstr ""
|
||||
msgid "Could not regenerate thumbnails"
|
||||
msgstr ""
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:461
|
||||
#: lib/claper_web/live/event_live/manage.ex:487
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Could not start thumbnail regeneration"
|
||||
msgstr ""
|
||||
@@ -2937,7 +2937,7 @@ msgstr ""
|
||||
msgid "Regenerating..."
|
||||
msgstr ""
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:458
|
||||
#: lib/claper_web/live/event_live/manage.ex:484
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Thumbnail regeneration started"
|
||||
msgstr ""
|
||||
@@ -3245,7 +3245,7 @@ msgstr ""
|
||||
msgid "Transcription deleted"
|
||||
msgstr ""
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:826
|
||||
#: lib/claper_web/live/event_live/manage.ex:852
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Transcription has been disabled by the administrator"
|
||||
msgstr ""
|
||||
@@ -3310,3 +3310,8 @@ msgstr ""
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Powered by"
|
||||
msgstr ""
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:452
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Could not reorder slides"
|
||||
msgstr ""
|
||||
|
||||
@@ -19,7 +19,7 @@ msgstr "Configuración"
|
||||
#: lib/claper_web/live/admin_live/user_live.html.heex:41
|
||||
#: lib/claper_web/live/admin_live/user_live.html.heex:104
|
||||
#: lib/claper_web/live/admin_live/user_live/form_component.ex:18
|
||||
#: lib/claper_web/live/event_live/manage.ex:1092
|
||||
#: lib/claper_web/live/event_live/manage.ex:1118
|
||||
#: lib/claper_web/live/form_live/form_component.html.heex:32
|
||||
#: lib/claper_web/live/user_settings_live/show.html.heex:18
|
||||
#: lib/claper_web/templates/user_registration/new.html.heex:63
|
||||
@@ -691,7 +691,7 @@ msgstr "Formulario"
|
||||
#: lib/claper_web/live/admin_live/oidc_provider_live.html.heex:74
|
||||
#: lib/claper_web/live/admin_live/oidc_provider_live.html.heex:234
|
||||
#: lib/claper_web/live/admin_live/oidc_provider_live/form_component.ex:24
|
||||
#: lib/claper_web/live/event_live/manage.ex:1091
|
||||
#: lib/claper_web/live/event_live/manage.ex:1117
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Name"
|
||||
msgstr "Nombre"
|
||||
@@ -1336,12 +1336,12 @@ msgstr "Recargue la página a la que está intentando acceder (no vuelva a envia
|
||||
msgid "Try logging in again"
|
||||
msgstr "Intente iniciar sesión de nuevo"
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:1064
|
||||
#: lib/claper_web/live/event_live/manage.ex:1090
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "No"
|
||||
msgstr "No"
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:1064
|
||||
#: lib/claper_web/live/event_live/manage.ex:1090
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Yes"
|
||||
msgstr "Sí"
|
||||
@@ -2666,10 +2666,10 @@ msgstr "ID del recurso"
|
||||
msgid "Resource Type"
|
||||
msgstr "Tipo de Respuesta"
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:1072
|
||||
#: lib/claper_web/live/event_live/manage.ex:1115
|
||||
#: lib/claper_web/live/event_live/manage.ex:1131
|
||||
#: lib/claper_web/live/event_live/manage.ex:1173
|
||||
#: lib/claper_web/live/event_live/manage.ex:1098
|
||||
#: lib/claper_web/live/event_live/manage.ex:1141
|
||||
#: lib/claper_web/live/event_live/manage.ex:1157
|
||||
#: lib/claper_web/live/event_live/manage.ex:1199
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Resource not found"
|
||||
msgstr "Recurso no encontrado"
|
||||
@@ -2907,7 +2907,7 @@ msgstr "Inicia sesión para lanzar o gestionar tus sesiones interactivas."
|
||||
msgid "Could not regenerate thumbnails"
|
||||
msgstr "No se pudieron regenerar las miniaturas"
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:461
|
||||
#: lib/claper_web/live/event_live/manage.ex:487
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Could not start thumbnail regeneration"
|
||||
msgstr "No se pudo iniciar la regeneración de miniaturas"
|
||||
@@ -2937,7 +2937,7 @@ msgstr "Regenerar miniaturas"
|
||||
msgid "Regenerating..."
|
||||
msgstr "Regenerando..."
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:458
|
||||
#: lib/claper_web/live/event_live/manage.ex:484
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Thumbnail regeneration started"
|
||||
msgstr "Regeneración de miniaturas iniciada"
|
||||
@@ -3245,7 +3245,7 @@ msgstr ""
|
||||
msgid "Transcription deleted"
|
||||
msgstr ""
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:826
|
||||
#: lib/claper_web/live/event_live/manage.ex:852
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Transcription has been disabled by the administrator"
|
||||
msgstr ""
|
||||
@@ -3310,3 +3310,8 @@ msgstr "Ilimitado"
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Powered by"
|
||||
msgstr "Con tecnología de"
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:452
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Could not reorder slides"
|
||||
msgstr ""
|
||||
|
||||
@@ -19,7 +19,7 @@ msgstr "Paramètres"
|
||||
#: lib/claper_web/live/admin_live/user_live.html.heex:41
|
||||
#: lib/claper_web/live/admin_live/user_live.html.heex:104
|
||||
#: lib/claper_web/live/admin_live/user_live/form_component.ex:18
|
||||
#: lib/claper_web/live/event_live/manage.ex:1092
|
||||
#: lib/claper_web/live/event_live/manage.ex:1118
|
||||
#: lib/claper_web/live/form_live/form_component.html.heex:32
|
||||
#: lib/claper_web/live/user_settings_live/show.html.heex:18
|
||||
#: lib/claper_web/templates/user_registration/new.html.heex:63
|
||||
@@ -695,7 +695,7 @@ msgstr "Formulaire"
|
||||
#: lib/claper_web/live/admin_live/oidc_provider_live.html.heex:74
|
||||
#: lib/claper_web/live/admin_live/oidc_provider_live.html.heex:234
|
||||
#: lib/claper_web/live/admin_live/oidc_provider_live/form_component.ex:24
|
||||
#: lib/claper_web/live/event_live/manage.ex:1091
|
||||
#: lib/claper_web/live/event_live/manage.ex:1117
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Name"
|
||||
msgstr "Nom"
|
||||
@@ -1340,12 +1340,12 @@ msgstr "Rechargez la page à laquelle vous essayez d'accéder (ne renvoyez pas l
|
||||
msgid "Try logging in again"
|
||||
msgstr "Essayez de vous reconnecter"
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:1064
|
||||
#: lib/claper_web/live/event_live/manage.ex:1090
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "No"
|
||||
msgstr "Non"
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:1064
|
||||
#: lib/claper_web/live/event_live/manage.ex:1090
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Yes"
|
||||
msgstr "Oui"
|
||||
@@ -2670,10 +2670,10 @@ msgstr "ID de la ressource"
|
||||
msgid "Resource Type"
|
||||
msgstr "Type de réponse"
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:1072
|
||||
#: lib/claper_web/live/event_live/manage.ex:1115
|
||||
#: lib/claper_web/live/event_live/manage.ex:1131
|
||||
#: lib/claper_web/live/event_live/manage.ex:1173
|
||||
#: lib/claper_web/live/event_live/manage.ex:1098
|
||||
#: lib/claper_web/live/event_live/manage.ex:1141
|
||||
#: lib/claper_web/live/event_live/manage.ex:1157
|
||||
#: lib/claper_web/live/event_live/manage.ex:1199
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Resource not found"
|
||||
msgstr "Ressource introuvable"
|
||||
@@ -2911,7 +2911,7 @@ msgstr "Connectez-vous pour lancer ou gérer vos sessions interactives."
|
||||
msgid "Could not regenerate thumbnails"
|
||||
msgstr "Impossible de régénérer les miniatures"
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:461
|
||||
#: lib/claper_web/live/event_live/manage.ex:487
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Could not start thumbnail regeneration"
|
||||
msgstr "Impossible de démarrer la régénération des miniatures"
|
||||
@@ -2941,7 +2941,7 @@ msgstr "Régénérer les miniatures"
|
||||
msgid "Regenerating..."
|
||||
msgstr "Régénération en cours..."
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:458
|
||||
#: lib/claper_web/live/event_live/manage.ex:484
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Thumbnail regeneration started"
|
||||
msgstr "Régénération des miniatures lancée"
|
||||
@@ -3249,7 +3249,7 @@ msgstr ""
|
||||
msgid "Transcription deleted"
|
||||
msgstr ""
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:826
|
||||
#: lib/claper_web/live/event_live/manage.ex:852
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Transcription has been disabled by the administrator"
|
||||
msgstr ""
|
||||
@@ -3314,3 +3314,8 @@ msgstr "Illimité"
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Powered by"
|
||||
msgstr "Propulsé par"
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:452
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Could not reorder slides"
|
||||
msgstr ""
|
||||
|
||||
@@ -19,7 +19,7 @@ msgstr "Beállítások"
|
||||
#: lib/claper_web/live/admin_live/user_live.html.heex:41
|
||||
#: lib/claper_web/live/admin_live/user_live.html.heex:104
|
||||
#: lib/claper_web/live/admin_live/user_live/form_component.ex:18
|
||||
#: lib/claper_web/live/event_live/manage.ex:1092
|
||||
#: lib/claper_web/live/event_live/manage.ex:1118
|
||||
#: lib/claper_web/live/form_live/form_component.html.heex:32
|
||||
#: lib/claper_web/live/user_settings_live/show.html.heex:18
|
||||
#: lib/claper_web/templates/user_registration/new.html.heex:63
|
||||
@@ -691,7 +691,7 @@ msgstr "Űrlap"
|
||||
#: lib/claper_web/live/admin_live/oidc_provider_live.html.heex:74
|
||||
#: lib/claper_web/live/admin_live/oidc_provider_live.html.heex:234
|
||||
#: lib/claper_web/live/admin_live/oidc_provider_live/form_component.ex:24
|
||||
#: lib/claper_web/live/event_live/manage.ex:1091
|
||||
#: lib/claper_web/live/event_live/manage.ex:1117
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Name"
|
||||
msgstr "Név"
|
||||
@@ -1336,12 +1336,12 @@ msgstr "Töltse újra az elérni kívánt oldalt, de ne küldje újra az adatoka
|
||||
msgid "Try logging in again"
|
||||
msgstr "Jelentkezzen be újra"
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:1064
|
||||
#: lib/claper_web/live/event_live/manage.ex:1090
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "No"
|
||||
msgstr "Nem"
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:1064
|
||||
#: lib/claper_web/live/event_live/manage.ex:1090
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Yes"
|
||||
msgstr "Igen"
|
||||
@@ -2666,10 +2666,10 @@ msgstr "Erőforrás-azonosító"
|
||||
msgid "Resource Type"
|
||||
msgstr "Válasz típus"
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:1072
|
||||
#: lib/claper_web/live/event_live/manage.ex:1115
|
||||
#: lib/claper_web/live/event_live/manage.ex:1131
|
||||
#: lib/claper_web/live/event_live/manage.ex:1173
|
||||
#: lib/claper_web/live/event_live/manage.ex:1098
|
||||
#: lib/claper_web/live/event_live/manage.ex:1141
|
||||
#: lib/claper_web/live/event_live/manage.ex:1157
|
||||
#: lib/claper_web/live/event_live/manage.ex:1199
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Resource not found"
|
||||
msgstr "Az erőforrás nem található"
|
||||
@@ -2907,7 +2907,7 @@ msgstr "Jelentkezzen be interaktív munkamenetei indításához vagy kezeléséh
|
||||
msgid "Could not regenerate thumbnails"
|
||||
msgstr "A miniatűrök nem hozhatók létre újra"
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:461
|
||||
#: lib/claper_web/live/event_live/manage.ex:487
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Could not start thumbnail regeneration"
|
||||
msgstr "A miniatűrök újragenerálása nem indítható el"
|
||||
@@ -2937,7 +2937,7 @@ msgstr "Miniatűrök újragenerálása"
|
||||
msgid "Regenerating..."
|
||||
msgstr "Újragenerálás..."
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:458
|
||||
#: lib/claper_web/live/event_live/manage.ex:484
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Thumbnail regeneration started"
|
||||
msgstr "Miniatűrök újragenerálása elindult"
|
||||
@@ -3245,7 +3245,7 @@ msgstr ""
|
||||
msgid "Transcription deleted"
|
||||
msgstr ""
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:826
|
||||
#: lib/claper_web/live/event_live/manage.ex:852
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Transcription has been disabled by the administrator"
|
||||
msgstr ""
|
||||
@@ -3310,3 +3310,8 @@ msgstr "Korlátlan"
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Powered by"
|
||||
msgstr "Üzemelteti"
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:452
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Could not reorder slides"
|
||||
msgstr ""
|
||||
|
||||
@@ -20,7 +20,7 @@ msgstr "Impostazioni"
|
||||
#: lib/claper_web/live/admin_live/user_live.html.heex:41
|
||||
#: lib/claper_web/live/admin_live/user_live.html.heex:104
|
||||
#: lib/claper_web/live/admin_live/user_live/form_component.ex:18
|
||||
#: lib/claper_web/live/event_live/manage.ex:1092
|
||||
#: lib/claper_web/live/event_live/manage.ex:1118
|
||||
#: lib/claper_web/live/form_live/form_component.html.heex:32
|
||||
#: lib/claper_web/live/user_settings_live/show.html.heex:18
|
||||
#: lib/claper_web/templates/user_registration/new.html.heex:63
|
||||
@@ -692,7 +692,7 @@ msgstr "Modulo"
|
||||
#: lib/claper_web/live/admin_live/oidc_provider_live.html.heex:74
|
||||
#: lib/claper_web/live/admin_live/oidc_provider_live.html.heex:234
|
||||
#: lib/claper_web/live/admin_live/oidc_provider_live/form_component.ex:24
|
||||
#: lib/claper_web/live/event_live/manage.ex:1091
|
||||
#: lib/claper_web/live/event_live/manage.ex:1117
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Name"
|
||||
msgstr "Nome"
|
||||
@@ -1337,12 +1337,12 @@ msgstr "Ricarica la pagina che stai cercando di accedere (non reinviare i dati)"
|
||||
msgid "Try logging in again"
|
||||
msgstr "Prova ad accedere di nuovo"
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:1064
|
||||
#: lib/claper_web/live/event_live/manage.ex:1090
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "No"
|
||||
msgstr "No"
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:1064
|
||||
#: lib/claper_web/live/event_live/manage.ex:1090
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Yes"
|
||||
msgstr "Sì"
|
||||
@@ -2667,10 +2667,10 @@ msgstr "ID risorsa"
|
||||
msgid "Resource Type"
|
||||
msgstr "Tipo di risposta"
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:1072
|
||||
#: lib/claper_web/live/event_live/manage.ex:1115
|
||||
#: lib/claper_web/live/event_live/manage.ex:1131
|
||||
#: lib/claper_web/live/event_live/manage.ex:1173
|
||||
#: lib/claper_web/live/event_live/manage.ex:1098
|
||||
#: lib/claper_web/live/event_live/manage.ex:1141
|
||||
#: lib/claper_web/live/event_live/manage.ex:1157
|
||||
#: lib/claper_web/live/event_live/manage.ex:1199
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Resource not found"
|
||||
msgstr "Risorsa non trovata"
|
||||
@@ -2908,7 +2908,7 @@ msgstr "Accedi per avviare o gestire le tue sessioni interattive."
|
||||
msgid "Could not regenerate thumbnails"
|
||||
msgstr "Impossibile rigenerare le miniature"
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:461
|
||||
#: lib/claper_web/live/event_live/manage.ex:487
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Could not start thumbnail regeneration"
|
||||
msgstr "Impossibile avviare la rigenerazione delle miniature"
|
||||
@@ -2938,7 +2938,7 @@ msgstr "Rigenera miniature"
|
||||
msgid "Regenerating..."
|
||||
msgstr "Rigenerazione in corso..."
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:458
|
||||
#: lib/claper_web/live/event_live/manage.ex:484
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Thumbnail regeneration started"
|
||||
msgstr "Rigenerazione delle miniature avviata"
|
||||
@@ -3246,7 +3246,7 @@ msgstr ""
|
||||
msgid "Transcription deleted"
|
||||
msgstr ""
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:826
|
||||
#: lib/claper_web/live/event_live/manage.ex:852
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Transcription has been disabled by the administrator"
|
||||
msgstr ""
|
||||
@@ -3311,3 +3311,8 @@ msgstr "Illimitato"
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Powered by"
|
||||
msgstr "Funziona con"
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:452
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Could not reorder slides"
|
||||
msgstr ""
|
||||
|
||||
@@ -19,7 +19,7 @@ msgstr "Iestatījumi"
|
||||
#: lib/claper_web/live/admin_live/user_live.html.heex:41
|
||||
#: lib/claper_web/live/admin_live/user_live.html.heex:104
|
||||
#: lib/claper_web/live/admin_live/user_live/form_component.ex:18
|
||||
#: lib/claper_web/live/event_live/manage.ex:1092
|
||||
#: lib/claper_web/live/event_live/manage.ex:1118
|
||||
#: lib/claper_web/live/form_live/form_component.html.heex:32
|
||||
#: lib/claper_web/live/user_settings_live/show.html.heex:18
|
||||
#: lib/claper_web/templates/user_registration/new.html.heex:63
|
||||
@@ -695,7 +695,7 @@ msgstr "Veidlapa"
|
||||
#: lib/claper_web/live/admin_live/oidc_provider_live.html.heex:74
|
||||
#: lib/claper_web/live/admin_live/oidc_provider_live.html.heex:234
|
||||
#: lib/claper_web/live/admin_live/oidc_provider_live/form_component.ex:24
|
||||
#: lib/claper_web/live/event_live/manage.ex:1091
|
||||
#: lib/claper_web/live/event_live/manage.ex:1117
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Name"
|
||||
msgstr "Nosaukums"
|
||||
@@ -1340,12 +1340,12 @@ msgstr "Atkārtoti ielādējiet lapu, kurai mēģināt piekļūt (neveiciet atk
|
||||
msgid "Try logging in again"
|
||||
msgstr "Mēģiniet vēlreiz pieteikties"
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:1064
|
||||
#: lib/claper_web/live/event_live/manage.ex:1090
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "No"
|
||||
msgstr "Nē"
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:1064
|
||||
#: lib/claper_web/live/event_live/manage.ex:1090
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Yes"
|
||||
msgstr "Jā"
|
||||
@@ -2670,10 +2670,10 @@ msgstr "Resursa ID"
|
||||
msgid "Resource Type"
|
||||
msgstr "Atbildes veids"
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:1072
|
||||
#: lib/claper_web/live/event_live/manage.ex:1115
|
||||
#: lib/claper_web/live/event_live/manage.ex:1131
|
||||
#: lib/claper_web/live/event_live/manage.ex:1173
|
||||
#: lib/claper_web/live/event_live/manage.ex:1098
|
||||
#: lib/claper_web/live/event_live/manage.ex:1141
|
||||
#: lib/claper_web/live/event_live/manage.ex:1157
|
||||
#: lib/claper_web/live/event_live/manage.ex:1199
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Resource not found"
|
||||
msgstr "Resurss nav atrasts"
|
||||
@@ -2911,7 +2911,7 @@ msgstr "Piesakieties, lai palaistu vai pārvaldītu savas interaktīvās sesijas
|
||||
msgid "Could not regenerate thumbnails"
|
||||
msgstr "Nevarēja atjaunot sīktēlus"
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:461
|
||||
#: lib/claper_web/live/event_live/manage.ex:487
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Could not start thumbnail regeneration"
|
||||
msgstr "Nevarēja sākt sīktēlu atjaunošanu"
|
||||
@@ -2941,7 +2941,7 @@ msgstr "Atjaunot sīktēlus"
|
||||
msgid "Regenerating..."
|
||||
msgstr "Atjauno..."
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:458
|
||||
#: lib/claper_web/live/event_live/manage.ex:484
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Thumbnail regeneration started"
|
||||
msgstr "Sīktēlu atjaunošana sākta"
|
||||
@@ -3249,7 +3249,7 @@ msgstr ""
|
||||
msgid "Transcription deleted"
|
||||
msgstr ""
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:826
|
||||
#: lib/claper_web/live/event_live/manage.ex:852
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Transcription has been disabled by the administrator"
|
||||
msgstr ""
|
||||
@@ -3314,3 +3314,8 @@ msgstr "Neierobežots"
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Powered by"
|
||||
msgstr "Darbina"
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:452
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Could not reorder slides"
|
||||
msgstr ""
|
||||
|
||||
@@ -19,7 +19,7 @@ msgstr "Instellingen"
|
||||
#: lib/claper_web/live/admin_live/user_live.html.heex:41
|
||||
#: lib/claper_web/live/admin_live/user_live.html.heex:104
|
||||
#: lib/claper_web/live/admin_live/user_live/form_component.ex:18
|
||||
#: lib/claper_web/live/event_live/manage.ex:1092
|
||||
#: lib/claper_web/live/event_live/manage.ex:1118
|
||||
#: lib/claper_web/live/form_live/form_component.html.heex:32
|
||||
#: lib/claper_web/live/user_settings_live/show.html.heex:18
|
||||
#: lib/claper_web/templates/user_registration/new.html.heex:63
|
||||
@@ -691,7 +691,7 @@ msgstr "Formulier"
|
||||
#: lib/claper_web/live/admin_live/oidc_provider_live.html.heex:74
|
||||
#: lib/claper_web/live/admin_live/oidc_provider_live.html.heex:234
|
||||
#: lib/claper_web/live/admin_live/oidc_provider_live/form_component.ex:24
|
||||
#: lib/claper_web/live/event_live/manage.ex:1091
|
||||
#: lib/claper_web/live/event_live/manage.ex:1117
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Name"
|
||||
msgstr "Naam"
|
||||
@@ -1336,12 +1336,12 @@ msgstr "Herlaad de pagina die u probeert te openen (dien geen gegevens opnieuw i
|
||||
msgid "Try logging in again"
|
||||
msgstr "Probeer opnieuw in te loggen"
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:1064
|
||||
#: lib/claper_web/live/event_live/manage.ex:1090
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "No"
|
||||
msgstr "Nee"
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:1064
|
||||
#: lib/claper_web/live/event_live/manage.ex:1090
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Yes"
|
||||
msgstr "Ja"
|
||||
@@ -2666,10 +2666,10 @@ msgstr "Resource-ID"
|
||||
msgid "Resource Type"
|
||||
msgstr "Reactietype"
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:1072
|
||||
#: lib/claper_web/live/event_live/manage.ex:1115
|
||||
#: lib/claper_web/live/event_live/manage.ex:1131
|
||||
#: lib/claper_web/live/event_live/manage.ex:1173
|
||||
#: lib/claper_web/live/event_live/manage.ex:1098
|
||||
#: lib/claper_web/live/event_live/manage.ex:1141
|
||||
#: lib/claper_web/live/event_live/manage.ex:1157
|
||||
#: lib/claper_web/live/event_live/manage.ex:1199
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Resource not found"
|
||||
msgstr "Resource niet gevonden"
|
||||
@@ -2907,7 +2907,7 @@ msgstr "Meld je aan om je interactieve sessies te starten of beheren."
|
||||
msgid "Could not regenerate thumbnails"
|
||||
msgstr "Miniaturen konden niet opnieuw worden gegenereerd"
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:461
|
||||
#: lib/claper_web/live/event_live/manage.ex:487
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Could not start thumbnail regeneration"
|
||||
msgstr "Het genereren van miniaturen kon niet worden gestart"
|
||||
@@ -2937,7 +2937,7 @@ msgstr "Miniaturen opnieuw genereren"
|
||||
msgid "Regenerating..."
|
||||
msgstr "Opnieuw genereren..."
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:458
|
||||
#: lib/claper_web/live/event_live/manage.ex:484
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Thumbnail regeneration started"
|
||||
msgstr "Genereren van miniaturen gestart"
|
||||
@@ -3245,7 +3245,7 @@ msgstr ""
|
||||
msgid "Transcription deleted"
|
||||
msgstr ""
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:826
|
||||
#: lib/claper_web/live/event_live/manage.ex:852
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Transcription has been disabled by the administrator"
|
||||
msgstr ""
|
||||
@@ -3310,3 +3310,8 @@ msgstr "Onbeperkt"
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Powered by"
|
||||
msgstr "Mogelijk gemaakt door"
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:452
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Could not reorder slides"
|
||||
msgstr ""
|
||||
|
||||
@@ -26,7 +26,7 @@ msgstr "Inställningar"
|
||||
#: lib/claper_web/live/admin_live/user_live.html.heex:41
|
||||
#: lib/claper_web/live/admin_live/user_live.html.heex:104
|
||||
#: lib/claper_web/live/admin_live/user_live/form_component.ex:18
|
||||
#: lib/claper_web/live/event_live/manage.ex:1092
|
||||
#: lib/claper_web/live/event_live/manage.ex:1118
|
||||
#: lib/claper_web/live/form_live/form_component.html.heex:32
|
||||
#: lib/claper_web/live/user_settings_live/show.html.heex:18
|
||||
#: lib/claper_web/templates/user_registration/new.html.heex:63
|
||||
@@ -724,7 +724,7 @@ msgstr "Formulär"
|
||||
#: lib/claper_web/live/admin_live/oidc_provider_live.html.heex:74
|
||||
#: lib/claper_web/live/admin_live/oidc_provider_live.html.heex:234
|
||||
#: lib/claper_web/live/admin_live/oidc_provider_live/form_component.ex:24
|
||||
#: lib/claper_web/live/event_live/manage.ex:1091
|
||||
#: lib/claper_web/live/event_live/manage.ex:1117
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Name"
|
||||
msgstr "Namn"
|
||||
@@ -1372,12 +1372,12 @@ msgstr "Ladda om sidan du försöker komma åt (skicka inte om data)"
|
||||
msgid "Try logging in again"
|
||||
msgstr "Försök logga in igen"
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:1064
|
||||
#: lib/claper_web/live/event_live/manage.ex:1090
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "No"
|
||||
msgstr "Nej"
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:1064
|
||||
#: lib/claper_web/live/event_live/manage.ex:1090
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Yes"
|
||||
msgstr "Ja"
|
||||
@@ -2704,10 +2704,10 @@ msgstr "Resurs-ID"
|
||||
msgid "Resource Type"
|
||||
msgstr "Resurstyp"
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:1072
|
||||
#: lib/claper_web/live/event_live/manage.ex:1115
|
||||
#: lib/claper_web/live/event_live/manage.ex:1131
|
||||
#: lib/claper_web/live/event_live/manage.ex:1173
|
||||
#: lib/claper_web/live/event_live/manage.ex:1098
|
||||
#: lib/claper_web/live/event_live/manage.ex:1141
|
||||
#: lib/claper_web/live/event_live/manage.ex:1157
|
||||
#: lib/claper_web/live/event_live/manage.ex:1199
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Resource not found"
|
||||
msgstr ""
|
||||
@@ -2945,7 +2945,7 @@ msgstr ""
|
||||
msgid "Could not regenerate thumbnails"
|
||||
msgstr ""
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:461
|
||||
#: lib/claper_web/live/event_live/manage.ex:487
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Could not start thumbnail regeneration"
|
||||
msgstr ""
|
||||
@@ -2975,7 +2975,7 @@ msgstr ""
|
||||
msgid "Regenerating..."
|
||||
msgstr ""
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:458
|
||||
#: lib/claper_web/live/event_live/manage.ex:484
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Thumbnail regeneration started"
|
||||
msgstr ""
|
||||
@@ -3283,7 +3283,7 @@ msgstr ""
|
||||
msgid "Transcription deleted"
|
||||
msgstr ""
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:826
|
||||
#: lib/claper_web/live/event_live/manage.ex:852
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Transcription has been disabled by the administrator"
|
||||
msgstr ""
|
||||
@@ -3348,3 +3348,8 @@ msgstr "Obegränsat"
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Powered by"
|
||||
msgstr "Drivs av"
|
||||
|
||||
#: lib/claper_web/live/event_live/manage.ex:452
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Could not reorder slides"
|
||||
msgstr ""
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
defmodule Claper.Repo.Migrations.AddSlideOrderToPresentationFiles do
|
||||
use Ecto.Migration
|
||||
|
||||
def change do
|
||||
alter table(:presentation_files) do
|
||||
add :slide_order, {:array, :integer}
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -64,6 +64,95 @@ defmodule Claper.PresentationsTest do
|
||||
end
|
||||
end
|
||||
|
||||
describe "slide ordering" do
|
||||
import Claper.PresentationsFixtures
|
||||
import Claper.PollsFixtures
|
||||
|
||||
test "get_slide_urls/1 and get_slide_thumbnail_urls/1 honor slide_order" do
|
||||
put_local_storage_config(unique_storage_dir())
|
||||
|
||||
presentation_file = presentation_file_fixture(%{hash: "ordered", length: 3})
|
||||
|
||||
{:ok, presentation_file} =
|
||||
Presentations.update_presentation_file(presentation_file, %{slide_order: [3, 1, 2]})
|
||||
|
||||
assert Presentations.get_slide_urls(presentation_file) == [
|
||||
"/uploads/ordered/3.jpg",
|
||||
"/uploads/ordered/1.jpg",
|
||||
"/uploads/ordered/2.jpg"
|
||||
]
|
||||
|
||||
assert Presentations.get_slide_thumbnail_urls(presentation_file) == [
|
||||
"/uploads/ordered/thumbs/3.jpg",
|
||||
"/uploads/ordered/thumbs/1.jpg",
|
||||
"/uploads/ordered/thumbs/2.jpg"
|
||||
]
|
||||
end
|
||||
|
||||
test "a stale slide_order falls back to natural order" do
|
||||
put_local_storage_config(unique_storage_dir())
|
||||
|
||||
presentation_file = presentation_file_fixture(%{hash: "stale", length: 3})
|
||||
|
||||
{:ok, presentation_file} =
|
||||
Presentations.update_presentation_file(presentation_file, %{slide_order: [2, 1]})
|
||||
|
||||
assert Presentations.get_slide_urls(presentation_file) == [
|
||||
"/uploads/stale/1.jpg",
|
||||
"/uploads/stale/2.jpg",
|
||||
"/uploads/stale/3.jpg"
|
||||
]
|
||||
end
|
||||
|
||||
test "update_presentation_file/2 clears slide_order with a nil param" do
|
||||
presentation_file = presentation_file_fixture()
|
||||
|
||||
{:ok, presentation_file} =
|
||||
Presentations.update_presentation_file(presentation_file, %{slide_order: [2, 1]})
|
||||
|
||||
assert presentation_file.slide_order == [2, 1]
|
||||
|
||||
{:ok, presentation_file} =
|
||||
Presentations.update_presentation_file(presentation_file, %{"slide_order" => nil})
|
||||
|
||||
assert is_nil(presentation_file.slide_order)
|
||||
end
|
||||
|
||||
test "reorder_slides/3 remaps slide order, interactions and state position" do
|
||||
presentation_file = presentation_file_fixture(%{length: 5})
|
||||
presentation_state_fixture(%{presentation_file: presentation_file, position: 1})
|
||||
|
||||
poll_at_0 = poll_fixture(%{presentation_file_id: presentation_file.id, position: 0})
|
||||
poll_at_3 = poll_fixture(%{presentation_file_id: presentation_file.id, position: 3})
|
||||
|
||||
# Move the slide displayed at position 3 to position 0
|
||||
assert {:ok, presentation_file, state} =
|
||||
Presentations.reorder_slides(presentation_file, 3, 0)
|
||||
|
||||
assert presentation_file.slide_order == [4, 1, 2, 3, 5]
|
||||
assert state.position == 2
|
||||
assert Claper.Polls.get_poll!(poll_at_0.id).position == 1
|
||||
assert Claper.Polls.get_poll!(poll_at_3.id).position == 0
|
||||
|
||||
# Moving it back restores the natural order
|
||||
assert {:ok, presentation_file, state} =
|
||||
Presentations.reorder_slides(presentation_file, 0, 3)
|
||||
|
||||
assert presentation_file.slide_order == [1, 2, 3, 4, 5]
|
||||
assert state.position == 1
|
||||
assert Claper.Polls.get_poll!(poll_at_0.id).position == 0
|
||||
assert Claper.Polls.get_poll!(poll_at_3.id).position == 3
|
||||
end
|
||||
|
||||
test "reorder_slides/3 rejects invalid positions" do
|
||||
presentation_file = presentation_file_fixture(%{length: 5})
|
||||
|
||||
assert {:error, :invalid_position} = Presentations.reorder_slides(presentation_file, 0, 0)
|
||||
assert {:error, :invalid_position} = Presentations.reorder_slides(presentation_file, -1, 2)
|
||||
assert {:error, :invalid_position} = Presentations.reorder_slides(presentation_file, 0, 5)
|
||||
end
|
||||
end
|
||||
|
||||
describe "presentation_states" do
|
||||
alias Claper.Presentations.PresentationState
|
||||
|
||||
|
||||
Reference in New Issue
Block a user