[Housekeeping] Bump Phoenix LiveView to 1.0.0 (#495)
* bumped liveview to 1.0.0 * Converted interpolation to new syntax
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
<div class="mb-6 flex gap-3 flex-row items-center">
|
||||
<h2 class="text-title-md2 font-bold text-black dark:text-white ml-4">
|
||||
Editing "<%= StringUtils.truncate(@media_item.title, 35) %>"
|
||||
Editing "{StringUtils.truncate(@media_item.title, 35)}"
|
||||
</h2>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<.icon name="hero-arrow-left" class="w-10 h-10 hover:dark:text-white" />
|
||||
</.link>
|
||||
<h2 class="text-title-md2 font-bold text-black dark:text-white ml-4">
|
||||
<%= StringUtils.truncate(@media_item.title, 35) %>
|
||||
{StringUtils.truncate(@media_item.title, 35)}
|
||||
</h2>
|
||||
</div>
|
||||
|
||||
@@ -31,8 +31,8 @@
|
||||
<.media_preview media_item={@media_item} />
|
||||
</div>
|
||||
<aside class="mt-4">
|
||||
<h2 class="text-xl mb-2"><%= @media_item.title %></h2>
|
||||
<div>Uploaded: <%= DateTime.to_date(@media_item.uploaded_at) %></div>
|
||||
<h2 class="text-xl mb-2">{@media_item.title}</h2>
|
||||
<div>Uploaded: {DateTime.to_date(@media_item.uploaded_at)}</div>
|
||||
<div>
|
||||
<span :if={URI.parse(@media_item.original_url).scheme =~ "http"}>
|
||||
<.subtle_link href={@media_item.original_url} target="_blank">Open Original</.subtle_link>
|
||||
@@ -58,7 +58,7 @@
|
||||
<section>
|
||||
<strong>Source:</strong>
|
||||
<.subtle_link href={~p"/sources/#{@media_item.source_id}"}>
|
||||
<%= @media_item.source.custom_name %>
|
||||
{@media_item.source.custom_name}
|
||||
</.subtle_link>
|
||||
<.list_items_from_map map={Map.from_struct(@media_item)} />
|
||||
</section>
|
||||
@@ -68,10 +68,10 @@
|
||||
<%= if match?([_|_], @media_item.tasks) do %>
|
||||
<.table rows={@media_item.tasks} table_class="text-black dark:text-white">
|
||||
<:col :let={task} label="Worker">
|
||||
<%= task.job.worker %>
|
||||
{task.job.worker}
|
||||
</:col>
|
||||
<:col :let={task} label="State">
|
||||
<%= task.job.state %>
|
||||
{task.job.state}
|
||||
</:col>
|
||||
<:col :let={task} label="Scheduled At">
|
||||
<.datetime_in_zone datetime={task.job.scheduled_at} />
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<.icon name="hero-arrow-left" class="w-10 h-10 hover:dark:text-white" />
|
||||
</.link>
|
||||
<h2 class="text-title-md2 font-bold text-black dark:text-white ml-4">
|
||||
Editing "<%= @media_profile.name %>"
|
||||
Editing "{@media_profile.name}"
|
||||
</h2>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -16,11 +16,11 @@
|
||||
<.table rows={@media_profiles} table_class="text-black dark:text-white">
|
||||
<:col :let={media_profile} label="Name">
|
||||
<.subtle_link href={~p"/media_profiles/#{media_profile.id}"}>
|
||||
<%= media_profile.name %>
|
||||
{media_profile.name}
|
||||
</.subtle_link>
|
||||
</:col>
|
||||
<:col :let={media_profile} label="Preferred Resolution">
|
||||
<%= media_profile.preferred_resolution %>
|
||||
{media_profile.preferred_resolution}
|
||||
</:col>
|
||||
<:col :let={media_profile} label="Sources">
|
||||
<.subtle_link href={~p"/media_profiles/#{media_profile.id}/#tab-sources"}>
|
||||
|
||||
+14
-10
@@ -6,7 +6,9 @@
|
||||
<ul class="list-disc list-inside ml-2 md:ml-5">
|
||||
<li>
|
||||
Liquid-style:
|
||||
<.inline_code>/{{ channel }}/{{ title }} - {{ id }}.{{ ext }}</.inline_code>
|
||||
<.inline_code>
|
||||
{"/#{double_brace("channel")}/#{double_brace("title")} - #{double_brace("id")}.#{double_brace("ext")}"}
|
||||
</.inline_code>
|
||||
</li>
|
||||
<li>
|
||||
<code class="text-sm">yt-dlp</code>-style
|
||||
@@ -17,7 +19,7 @@
|
||||
</li>
|
||||
<li>
|
||||
Any bare words:
|
||||
<.inline_code>/videos/1080p/{{ id }}.{{ ext }}</.inline_code>
|
||||
<.inline_code>{"/videos/1080p/#{double_brace("id")}.#{double_brace("ext")}"}</.inline_code>
|
||||
</li>
|
||||
</ul>
|
||||
<p class="my-2">
|
||||
@@ -25,7 +27,7 @@
|
||||
<em>any</em>
|
||||
single-word <code class="text-sm">yt-dlp</code>
|
||||
option can be used as liquid-style and it's automatically made filepath-safe. For example, the
|
||||
<.inline_code>{{ duration }}</.inline_code>
|
||||
<.inline_code>{double_brace("duration")}</.inline_code>
|
||||
option is translated to
|
||||
<.inline_code>%(duration)S</.inline_code>
|
||||
</p>
|
||||
@@ -33,12 +35,14 @@
|
||||
<strong>Major 🔑:</strong>
|
||||
these syntaxes can be mixed and matched freely! I prefer to use liquid-style and bare words
|
||||
but I'll include <code class="text-sm">yt-dlp</code>-style when I need more control. For example:
|
||||
<.inline_code>/1080p/{{ channel }}/{{ title }}-(%(subtitles.en.-1.ext)s).{{ ext }}</.inline_code>
|
||||
<.inline_code>
|
||||
{"/1080p/#{double_brace("channel")}/#{double_brace("title")}-(%(subtitles.en.-1.ext)s).#{double_brace("ext")}"}
|
||||
</.inline_code>
|
||||
</p>
|
||||
<p class="my-2">
|
||||
<strong>NOTE:</strong>
|
||||
Your template <em>must</em>
|
||||
end with an extension option (<.inline_code>.{{ ext }}</.inline_code>
|
||||
end with an extension option (<.inline_code>.{double_brace("ext")}</.inline_code>
|
||||
or
|
||||
<.inline_code>.%(ext)S</.inline_code>).
|
||||
Downloading won't work as expected without it.
|
||||
@@ -59,21 +63,21 @@
|
||||
<h3 class="text-lg font-bold my-2">Media Center Custom Aliases</h3>
|
||||
<ul class="list-disc list-inside mb-4 ml-2 md:ml-5 max-w-prose">
|
||||
<li :for={{k, v} <- media_center_custom_output_template_options()} class="mt-1">
|
||||
<.inline_code>{{ <%= k %> }}</.inline_code>
|
||||
<span :if={v}>- <%= html_escape({:safe, v}) %></span>
|
||||
<.inline_code>{double_brace(k)}</.inline_code>
|
||||
<span :if={v}>- {html_escape({:safe, v})}</span>
|
||||
</li>
|
||||
</ul>
|
||||
<h3 class="text-lg font-bold mb-2">Other Custom Aliases</h3>
|
||||
<ul class="list-disc list-inside mb-4 ml-2 md:ml-5 max-w-prose">
|
||||
<li :for={{k, v} <- other_custom_output_template_options()} class="mt-1">
|
||||
<.inline_code>{{ <%= k %> }}</.inline_code>
|
||||
<span :if={v}>- <%= html_escape({:safe, v}) %></span>
|
||||
<.inline_code>{double_brace(k)}</.inline_code>
|
||||
<span :if={v}>- {html_escape({:safe, v})}</span>
|
||||
</li>
|
||||
</ul>
|
||||
<h3 class="text-lg font-bold mb-2">Common Options</h3>
|
||||
<ul class="list-disc list-inside ml-2 md:ml-5">
|
||||
<li :for={opt <- common_output_template_options()} class="mt-1">
|
||||
<.inline_code>{{ <%= opt %> }}</.inline_code>
|
||||
<.inline_code>{double_brace(opt)}</.inline_code>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<.icon name="hero-arrow-left" class="w-10 h-10 hover:dark:text-white" />
|
||||
</.link>
|
||||
<h2 class="text-title-md2 font-bold text-black dark:text-white ml-2">
|
||||
<%= @media_profile.name %>
|
||||
{@media_profile.name}
|
||||
</h2>
|
||||
</div>
|
||||
|
||||
@@ -33,10 +33,10 @@
|
||||
<.table rows={@sources} table_class="text-black dark:text-white">
|
||||
<:col :let={source} label="Name">
|
||||
<.subtle_link href={~p"/sources/#{source.id}"}>
|
||||
<%= source.custom_name || source.collection_name %>
|
||||
{source.custom_name || source.collection_name}
|
||||
</.subtle_link>
|
||||
</:col>
|
||||
<:col :let={source} label="Type"><%= source.collection_type %></:col>
|
||||
<:col :let={source} label="Type">{source.collection_type}</:col>
|
||||
<:col :let={source} label="Should Download?">
|
||||
<.icon name={if source.download_media, do: "hero-check", else: "hero-x-mark"} />
|
||||
</:col>
|
||||
|
||||
@@ -17,7 +17,7 @@ defmodule PinchflatWeb.Pages.PageHTML do
|
||||
})
|
||||
|
||||
~H"""
|
||||
<.localized_number number={@num} /> <%= @suffix %>
|
||||
<.localized_number number={@num} /> {@suffix}
|
||||
"""
|
||||
end
|
||||
end
|
||||
|
||||
@@ -30,21 +30,21 @@ defmodule Pinchflat.Pages.HistoryTableLive do
|
||||
<.table rows={@records} table_class="text-white">
|
||||
<:col :let={media_item} label="Title">
|
||||
<.subtle_link href={~p"/sources/#{media_item.source_id}/media/#{media_item}"}>
|
||||
<%= StringUtils.truncate(media_item.title, 35) %>
|
||||
{StringUtils.truncate(media_item.title, 35)}
|
||||
</.subtle_link>
|
||||
</:col>
|
||||
<:col :let={media_item} label="Upload Date">
|
||||
<%= DateTime.to_date(media_item.uploaded_at) %>
|
||||
{DateTime.to_date(media_item.uploaded_at)}
|
||||
</:col>
|
||||
<:col :let={media_item} label="Indexed At">
|
||||
<%= format_datetime(media_item.inserted_at) %>
|
||||
{format_datetime(media_item.inserted_at)}
|
||||
</:col>
|
||||
<:col :let={media_item} label="Downloaded At">
|
||||
<%= format_datetime(media_item.media_downloaded_at) %>
|
||||
{format_datetime(media_item.media_downloaded_at)}
|
||||
</:col>
|
||||
<:col :let={media_item} label="Source">
|
||||
<.subtle_link href={~p"/sources/#{media_item.source_id}"}>
|
||||
<%= StringUtils.truncate(media_item.source.custom_name, 35) %>
|
||||
{StringUtils.truncate(media_item.source.custom_name, 35)}
|
||||
</.subtle_link>
|
||||
</:col>
|
||||
</.table>
|
||||
|
||||
@@ -42,13 +42,13 @@
|
||||
<div class="rounded-sm border shadow-default border-strokedark bg-boxdark mt-4 p-5">
|
||||
<span class="text-2xl font-medium mb-4">Media History</span>
|
||||
<section class="mt-6">
|
||||
<%= live_render(@conn, Pinchflat.Pages.HistoryTableLive) %>
|
||||
{live_render(@conn, Pinchflat.Pages.HistoryTableLive)}
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<div class="rounded-sm border shadow-default border-strokedark bg-boxdark mt-4 p-5">
|
||||
<span class="text-2xl font-medium mb-4">Active Tasks</span>
|
||||
<section class="mt-6 min-h-80">
|
||||
<%= live_render(@conn, Pinchflat.Pages.JobTableLive) %>
|
||||
{live_render(@conn, Pinchflat.Pages.JobTableLive)}
|
||||
</section>
|
||||
</div>
|
||||
|
||||
@@ -19,18 +19,18 @@ defmodule Pinchflat.Pages.JobTableLive do
|
||||
<div class="max-w-full overflow-x-auto">
|
||||
<.table rows={@tasks} table_class="text-white">
|
||||
<:col :let={task} label="Task">
|
||||
<%= worker_to_task_name(task.job.worker) %>
|
||||
{worker_to_task_name(task.job.worker)}
|
||||
</:col>
|
||||
<:col :let={task} label="Subject">
|
||||
<.subtle_link href={task_to_link(task)}>
|
||||
<%= StringUtils.truncate(task_to_record_name(task), 35) %>
|
||||
{StringUtils.truncate(task_to_record_name(task), 35)}
|
||||
</.subtle_link>
|
||||
</:col>
|
||||
<:col :let={task} label="Attempt No.">
|
||||
<%= task.job.attempt %>
|
||||
{task.job.attempt}
|
||||
</:col>
|
||||
<:col :let={task} label="Started At">
|
||||
<%= format_datetime(task.job.attempted_at) %>
|
||||
{format_datetime(task.job.attempted_at)}
|
||||
</:col>
|
||||
</.table>
|
||||
</div>
|
||||
|
||||
@@ -14,7 +14,7 @@ defmodule PinchflatWeb.Searches.SearchHTML do
|
||||
|
||||
~H"""
|
||||
<%= for fragment <- @split_string do %>
|
||||
<%= render_fragment(fragment) %>
|
||||
{render_fragment(fragment)}
|
||||
<% end %>
|
||||
"""
|
||||
end
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<div class="mb-6 flex gap-3 flex-row items-center justify-between">
|
||||
<h2 class="text-title-md2 font-bold text-black dark:text-white">
|
||||
Results for "<%= StringUtils.truncate(@search_term, 50) %>"
|
||||
Results for "{StringUtils.truncate(@search_term, 50)}"
|
||||
</h2>
|
||||
</div>
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<.table rows={@search_results} table_class="text-black dark:text-white">
|
||||
<:col :let={result} label="Title">
|
||||
<.subtle_link href={~p"/sources/#{result.source_id}/media/#{result.id}"}>
|
||||
<%= StringUtils.truncate(result.title, 35) %>
|
||||
{StringUtils.truncate(result.title, 35)}
|
||||
</.subtle_link>
|
||||
</:col>
|
||||
<:col :let={result} label="Excerpt">
|
||||
|
||||
@@ -19,11 +19,11 @@
|
||||
</span>
|
||||
</section>
|
||||
|
||||
<%= live_render(
|
||||
{live_render(
|
||||
@conn,
|
||||
Pinchflat.Settings.AppriseServerLive,
|
||||
session: %{"value" => f[:apprise_server].value}
|
||||
) %>
|
||||
)}
|
||||
</section>
|
||||
|
||||
<section class="mt-8">
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<.icon name="hero-arrow-left" class="w-10 h-10 hover:dark:text-white" />
|
||||
</.link>
|
||||
<h2 class="text-title-md2 font-bold text-black dark:text-white ml-4">
|
||||
Editing "<%= @source.custom_name %>"
|
||||
Editing "{@source.custom_name}"
|
||||
</h2>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<div class="rounded-sm border border-stroke bg-white shadow-default dark:border-strokedark dark:bg-boxdark">
|
||||
<div class="max-w-full overflow-x-auto">
|
||||
<div class="flex flex-col gap-10 min-w-max">
|
||||
<%= live_render(@conn, PinchflatWeb.Sources.IndexTableLive) %>
|
||||
{live_render(@conn, PinchflatWeb.Sources.IndexTableLive)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -13,7 +13,7 @@ defmodule PinchflatWeb.Sources.IndexTableLive do
|
||||
<.table rows={@sources} table_class="text-white">
|
||||
<:col :let={source} label="Name">
|
||||
<.subtle_link href={~p"/sources/#{source.id}"}>
|
||||
<%= StringUtils.truncate(source.custom_name || source.collection_name, 35) %>
|
||||
{StringUtils.truncate(source.custom_name || source.collection_name, 35)}
|
||||
</.subtle_link>
|
||||
</:col>
|
||||
<:col :let={source} label="Pending">
|
||||
@@ -36,7 +36,7 @@ defmodule PinchflatWeb.Sources.IndexTableLive do
|
||||
</:col>
|
||||
<:col :let={source} label="Media Profile">
|
||||
<.subtle_link href={~p"/media_profiles/#{source.media_profile_id}"}>
|
||||
<%= source.media_profile.name %>
|
||||
{source.media_profile.name}
|
||||
</.subtle_link>
|
||||
</:col>
|
||||
<:col :let={source} label="Enabled?">
|
||||
|
||||
@@ -48,14 +48,14 @@ defmodule PinchflatWeb.Sources.MediaItemTableLive do
|
||||
<.table rows={@records} table_class="text-white">
|
||||
<:col :let={media_item} label="Title">
|
||||
<.subtle_link href={~p"/sources/#{@source.id}/media/#{media_item.id}"}>
|
||||
<%= StringUtils.truncate(media_item.title, 50) %>
|
||||
{StringUtils.truncate(media_item.title, 50)}
|
||||
</.subtle_link>
|
||||
</:col>
|
||||
<:col :let={media_item} :if={@media_state == "other"} label="Manually Ignored?">
|
||||
<.icon name={if media_item.prevent_download, do: "hero-check", else: "hero-x-mark"} />
|
||||
</:col>
|
||||
<:col :let={media_item} label="Upload Date">
|
||||
<%= DateTime.to_date(media_item.uploaded_at) %>
|
||||
{DateTime.to_date(media_item.uploaded_at)}
|
||||
</:col>
|
||||
<:col :let={media_item} label="" class="flex justify-end">
|
||||
<.icon_link href={~p"/sources/#{@source.id}/media/#{media_item.id}/edit"} icon="hero-pencil-square" class="mr-4" />
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<.icon name="hero-arrow-left" class="w-10 h-10 hover:dark:text-white" />
|
||||
</.link>
|
||||
<h2 class="text-title-md2 font-bold text-black dark:text-white ml-4">
|
||||
<%= @source.custom_name %>
|
||||
{@source.custom_name}
|
||||
</h2>
|
||||
</div>
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
<section>
|
||||
<strong>Media Profile:</strong>
|
||||
<.subtle_link href={~p"/media_profiles/#{@source.media_profile_id}"}>
|
||||
<%= @source.media_profile.name %>
|
||||
{@source.media_profile.name}
|
||||
</.subtle_link>
|
||||
</section>
|
||||
|
||||
@@ -37,34 +37,34 @@
|
||||
</div>
|
||||
</:tab>
|
||||
<:tab title="Pending" id="pending">
|
||||
<%= live_render(
|
||||
{live_render(
|
||||
@conn,
|
||||
PinchflatWeb.Sources.MediaItemTableLive,
|
||||
session: %{"source_id" => @source.id, "media_state" => "pending"}
|
||||
) %>
|
||||
)}
|
||||
</:tab>
|
||||
<:tab title="Downloaded" id="downloaded">
|
||||
<%= live_render(
|
||||
{live_render(
|
||||
@conn,
|
||||
PinchflatWeb.Sources.MediaItemTableLive,
|
||||
session: %{"source_id" => @source.id, "media_state" => "downloaded"}
|
||||
) %>
|
||||
)}
|
||||
</:tab>
|
||||
<:tab title="Other" id="other">
|
||||
<%= live_render(
|
||||
{live_render(
|
||||
@conn,
|
||||
PinchflatWeb.Sources.MediaItemTableLive,
|
||||
session: %{"source_id" => @source.id, "media_state" => "other"}
|
||||
) %>
|
||||
)}
|
||||
</:tab>
|
||||
<:tab title="Tasks" id="tasks">
|
||||
<%= if match?([_|_], @pending_tasks) do %>
|
||||
<.table rows={@pending_tasks} table_class="text-black dark:text-white">
|
||||
<:col :let={task} label="Worker">
|
||||
<%= task.job.worker %>
|
||||
{task.job.worker}
|
||||
</:col>
|
||||
<:col :let={task} label="State">
|
||||
<%= task.job.state %>
|
||||
{task.job.state}
|
||||
</:col>
|
||||
<:col :let={task} label="Scheduled At">
|
||||
<.datetime_in_zone datetime={task.job.scheduled_at} />
|
||||
|
||||
Reference in New Issue
Block a user