Compare commits
5 Commits
v0.16.2
...
dev-dl-lis
| Author | SHA1 | Date | |
|---|---|---|---|
| 5ca0cd651d | |||
| b6bc1645b4 | |||
| 16023f1a26 | |||
| 725034dd4e | |||
| 234aeab120 |
@@ -1,4 +1,4 @@
|
|||||||
FROM dunglas/frankenphp
|
FROM dunglas/frankenphp:php8.4-alpine
|
||||||
|
|
||||||
ENV SERVER_NAME=":80"
|
ENV SERVER_NAME=":80"
|
||||||
ENV CADDY_GLOBAL_OPTIONS="auto_https off"
|
ENV CADDY_GLOBAL_OPTIONS="auto_https off"
|
||||||
@@ -11,6 +11,8 @@ RUN install-php-extensions \
|
|||||||
zip \
|
zip \
|
||||||
opcache
|
opcache
|
||||||
|
|
||||||
|
RUN apk add --no-cache wget
|
||||||
|
|
||||||
HEALTHCHECK --interval=3s --timeout=3s --retries=10 CMD [ "php", "/app/bin/console", "startup:status" ]
|
HEALTHCHECK --interval=3s --timeout=3s --retries=10 CMD [ "php", "/app/bin/console", "startup:status" ]
|
||||||
|
|
||||||
COPY docker/app/Caddyfile /etc/frankenphp/Caddyfile
|
COPY docker/app/Caddyfile /etc/frankenphp/Caddyfile
|
||||||
|
|||||||
@@ -7,7 +7,13 @@ import { getComponent } from '@symfony/ux-live-component';
|
|||||||
|
|
||||||
/* stimulusFetch: 'lazy' */
|
/* stimulusFetch: 'lazy' */
|
||||||
export default class extends Controller {
|
export default class extends Controller {
|
||||||
static targets = ['download']
|
static targets = ['download', 'downloadRow', 'viewAllBtn']
|
||||||
|
static values = {
|
||||||
|
isWidget: Boolean,
|
||||||
|
perPage: Number,
|
||||||
|
}
|
||||||
|
|
||||||
|
component = null;
|
||||||
|
|
||||||
async initialize() {
|
async initialize() {
|
||||||
this.component = await getComponent(this.element);
|
this.component = await getComponent(this.element);
|
||||||
@@ -22,9 +28,38 @@ export default class extends Controller {
|
|||||||
// this.fooTarget.addEventListener('click', this._fooBar)
|
// this.fooTarget.addEventListener('click', this._fooBar)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
downloadRowTargetConnected(target) {
|
||||||
|
if (Boolean(target.getAttribute('isBroadcasted')) === true) {
|
||||||
|
this.viewAllBtnTarget.parentElement.append(this.viewAllBtnTarget);
|
||||||
|
if (this.downloadRowTargets.length > this.perPageValue) {
|
||||||
|
target.classList.add('hidden');
|
||||||
|
this.viewAllBtnTarget.classList.remove('hidden');
|
||||||
|
} else {
|
||||||
|
this.viewAllBtnTarget.classList.add('hidden');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
downloadRowTargetDisconnected(target) {
|
||||||
|
this.viewAllBtnTarget.parentElement.append(this.viewAllBtnTarget);
|
||||||
|
let i = 1;
|
||||||
|
this.downloadRowTargets.forEach((downloadRow) => {
|
||||||
|
console.log(downloadRow)
|
||||||
|
if (i <= this.perPageValue) {
|
||||||
|
downloadRow.classList.remove('hidden');
|
||||||
|
} else {
|
||||||
|
downloadRow.classList.add('hidden');
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
if (this.downloadRowTargets.length > this.perPage) {
|
||||||
|
this.viewAllBtnTarget.classList.remove('hidden');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
downloadTargetConnected(target) {
|
downloadTargetConnected(target) {
|
||||||
let downloads = this.element.querySelectorAll('tbody tr');
|
let downloads = this.element.querySelectorAll('tbody tr');
|
||||||
if (downloads.length > 5) {
|
if (downloads.length > this.perPageValue) {
|
||||||
target.classList.add('hidden');
|
target.classList.add('hidden');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- $PWD:/app
|
- $PWD:/app
|
||||||
tty: true
|
tty: true
|
||||||
command: php /app/bin/console messenger:consume async -vv --time-limit=3600 limit=10
|
command: php /app/bin/console messenger:consume async -vv --time-limit=3600 --limit=10
|
||||||
|
|
||||||
|
|
||||||
scheduler:
|
scheduler:
|
||||||
|
|||||||
@@ -11,6 +11,8 @@ RUN install-php-extensions \
|
|||||||
zip \
|
zip \
|
||||||
opcache
|
opcache
|
||||||
|
|
||||||
|
RUN apk add --no-cache wget
|
||||||
|
|
||||||
COPY . /app
|
COPY . /app
|
||||||
|
|
||||||
ENTRYPOINT [ "php", "/app/bin/console", "messenger:consume", "async" ]
|
ENTRYPOINT [ "php", "/app/bin/console", "messenger:consume", "async" ]
|
||||||
|
|||||||
16
src/Twig/Components/DownloadListRow.php
Normal file
16
src/Twig/Components/DownloadListRow.php
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Twig\Components;
|
||||||
|
|
||||||
|
use App\Download\Framework\Entity\Download;
|
||||||
|
use Symfony\UX\TwigComponent\Attribute\AsTwigComponent;
|
||||||
|
|
||||||
|
#[AsTwigComponent]
|
||||||
|
final class DownloadListRow
|
||||||
|
{
|
||||||
|
public Download $download;
|
||||||
|
|
||||||
|
public bool $isWidget = true;
|
||||||
|
|
||||||
|
public bool $isBroadcasted = false;
|
||||||
|
}
|
||||||
12
src/Twig/Components/MonitorListRow.php
Normal file
12
src/Twig/Components/MonitorListRow.php
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Twig\Components;
|
||||||
|
|
||||||
|
use App\Monitor\Framework\Entity\Monitor;
|
||||||
|
use Symfony\UX\TwigComponent\Attribute\AsTwigComponent;
|
||||||
|
|
||||||
|
#[AsTwigComponent]
|
||||||
|
final class MonitorListRow
|
||||||
|
{
|
||||||
|
public Monitor $monitor;
|
||||||
|
}
|
||||||
@@ -7,7 +7,7 @@ module.exports = {
|
|||||||
safelist: [
|
safelist: [
|
||||||
"bg-blue-300",
|
"bg-blue-300",
|
||||||
"bg-orange-300",
|
"bg-orange-300",
|
||||||
"bg-rose-300",
|
"bg-fuchsia-300",
|
||||||
"bg-green-400",
|
"bg-green-400",
|
||||||
"bg-purple-400",
|
"bg-purple-400",
|
||||||
"bg-orange-400",
|
"bg-orange-400",
|
||||||
|
|||||||
@@ -5,38 +5,19 @@
|
|||||||
|
|
||||||
<turbo-stream action="append" target="active_downloads">
|
<turbo-stream action="append" target="active_downloads">
|
||||||
<template>
|
<template>
|
||||||
<tr data-download-list-target="download" id="ad_download_{{ entity.id }}">
|
<twig:DownloadListRow download="{{ entity }}" isBroadcasted="true" />
|
||||||
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-800 dark:text-stone-800 min-w-[45ch] max-w-[45ch] truncate">
|
|
||||||
{{ entity.title }}
|
|
||||||
</td>
|
|
||||||
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-800 dark:text-gray-50">
|
|
||||||
{% if entity.progress < 100 %}
|
|
||||||
<div class="w-[3.25ch] h-[3.25ch] bg-purple-600 rounded-full block text-center table-cell align-middle text-xs text-gray-50">
|
|
||||||
{{ entity.progress }}
|
|
||||||
</div>
|
|
||||||
{% else %}
|
|
||||||
<twig:StatusBadge color="green" status="Complete" />
|
|
||||||
{% endif %}
|
|
||||||
</td>
|
|
||||||
<td></td>
|
|
||||||
</tr>
|
|
||||||
</template>
|
</template>
|
||||||
</turbo-stream>
|
</turbo-stream>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block update %}
|
{% block update %}
|
||||||
{% if entity.status != "Complete" %}
|
{% if entity.status != "Complete" %}
|
||||||
<turbo-stream action="update" target="ad_download_{{ id }}">
|
<turbo-stream action="update" target="download_progress_{{ id }}">
|
||||||
<template>
|
<template>
|
||||||
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-800 dark:text-stone-800 min-w-[45ch] max-w-[45ch] truncate">
|
<div class="text-green-700 rounded-sm text-bold text-gray-950 text-center bg-green-600 h-5"
|
||||||
{{ entity.title }}
|
style="width:{{ entity.progress }}%">
|
||||||
</td>
|
<span>{{ entity.progress }}%</span>
|
||||||
<td class="px-6 py-4 whitespace-nowrap text-sm text-end text-gray-800 dark:text-gray-50">
|
</div>
|
||||||
<div class="border-2 border-green-700 rounded-md w-full h-6 align-middle overflow-hidden">
|
|
||||||
<div class="text-green-700 rounded-sm text-bold text-gray-950 text-center bg-green-600 h-5" style="width:{{ entity.progress }}%">{{ entity.progress }}%</div>
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
<td></td>
|
|
||||||
</template>
|
</template>
|
||||||
</turbo-stream>
|
</turbo-stream>
|
||||||
{% else %}
|
{% else %}
|
||||||
@@ -54,23 +35,7 @@
|
|||||||
|
|
||||||
<turbo-stream action="prepend" target="complete_downloads">
|
<turbo-stream action="prepend" target="complete_downloads">
|
||||||
<template>
|
<template>
|
||||||
<tr id="ad_download_{{ entity.id }}">
|
<twig:DownloadListRow download="{{ entity }}" :isBroadcasted="true" />
|
||||||
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-800 dark:text-stone-800 min-w-[45ch] max-w-[45ch] truncate">
|
|
||||||
{{ entity.title }}
|
|
||||||
</td>
|
|
||||||
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-800 dark:text-gray-50">
|
|
||||||
<twig:StatusBadge color="green" status="Complete" />
|
|
||||||
</td>
|
|
||||||
<td class="px-6 py-4 flex flex-row align-middle justify-center">
|
|
||||||
<button {{ stimulus_action('download_list', 'deleteDownload', 'click', {id: download.id}) }}>
|
|
||||||
<twig:ux:icon
|
|
||||||
name="ic:twotone-cancel" width="18px"
|
|
||||||
class="rounded-full align-middle text-red-600"
|
|
||||||
title="Remove {{ download.title }} from download list. This will not delete the file."
|
|
||||||
/>
|
|
||||||
</button>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</template>
|
</template>
|
||||||
</turbo-stream>
|
</turbo-stream>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@@ -3,81 +3,19 @@
|
|||||||
<turbo-stream action="remove" target="active_monitors_no_monitors">
|
<turbo-stream action="remove" target="active_monitors_no_monitors">
|
||||||
</turbo-stream>
|
</turbo-stream>
|
||||||
|
|
||||||
<turbo-stream action="append" target="monitors">
|
<turbo-stream action="prepend" target="monitors">
|
||||||
<template>
|
<template>
|
||||||
<tr id="monitor_{{ entity.id }}">
|
<twig:MonitorListRow monitor="{{ entity }}" />
|
||||||
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-stone-800 min-w-[50ch] max-w-[50ch] truncate">
|
|
||||||
{{ entity.title }}
|
|
||||||
</td>
|
|
||||||
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-800">
|
|
||||||
{{ entity.searchCount }}
|
|
||||||
</td>
|
|
||||||
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-800">
|
|
||||||
{{ entity.createdAt|date('m/d/Y h:i a') }}
|
|
||||||
</td>
|
|
||||||
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-800">
|
|
||||||
{{ entity.lastSearch|date('m/d/Y h:i a') }}
|
|
||||||
</td>
|
|
||||||
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-800">
|
|
||||||
{% if entity.status == "New" %}
|
|
||||||
<twig:StatusBadge color="orange" status="{{ entity.status }}" />
|
|
||||||
{% elseif entity.status == "In Progress" or entity.status == "Active" %}
|
|
||||||
<twig:StatusBadge color="purple" status="{{ entity.status }}" />
|
|
||||||
{% else %}
|
|
||||||
<twig:StatusBadge color="green" status="{{ entity.status }}" />
|
|
||||||
{% endif %}
|
|
||||||
</td>
|
|
||||||
<td class="px-6 py-4 flex flex-row align-middle justify-center">
|
|
||||||
<button {{ stimulus_action('monitor_list', 'deleteMonitor', 'click', {id: entity.id}) }}>
|
|
||||||
<twig:ux:icon
|
|
||||||
name="ic:twotone-cancel" width="18px"
|
|
||||||
class="rounded-full align-middle text-red-600"
|
|
||||||
title="Remove {{ entity.title }} from your Monitor list."
|
|
||||||
/>
|
|
||||||
</button>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</template>
|
</template>
|
||||||
</turbo-stream>
|
</turbo-stream>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block update %}
|
{% block update %}
|
||||||
<turbo-stream action="prepend" target="monitors">
|
<turbo-stream action="replace" target="monitor_{{ id }}">
|
||||||
<template>
|
<template>
|
||||||
<tr id="monitor_{{ entity.id }}">
|
<twig:MonitorListRow monitor="{{ entity }}" />
|
||||||
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-stone-800 min-w-[50ch] max-w-[50ch] truncate">
|
</template>
|
||||||
{{ entity.title }}
|
</turbo-stream>
|
||||||
</td>
|
|
||||||
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-800">
|
|
||||||
{{ entity.searchCount }}
|
|
||||||
</td>
|
|
||||||
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-800">
|
|
||||||
{{ entity.createdAt|date('m/d/Y h:i a') }}
|
|
||||||
</td>
|
|
||||||
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-800">
|
|
||||||
{{ entity.lastSearch|date('m/d/Y h:i a') }}
|
|
||||||
</td>
|
|
||||||
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-800">
|
|
||||||
{% if entity.status == "New" %}
|
|
||||||
<twig:StatusBadge color="orange" status="{{ entity.status }}" />
|
|
||||||
{% elseif entity.status == "In Progress" or entity.status == "Active" %}
|
|
||||||
<twig:StatusBadge color="purple" status="{{ entity.status }}" />
|
|
||||||
{% else %}
|
|
||||||
<twig:StatusBadge color="green" status="{{ entity.status }}" />
|
|
||||||
{% endif %}
|
|
||||||
</td>
|
|
||||||
<td class="px-6 py-4 flex flex-row align-middle justify-center">
|
|
||||||
<button {{ stimulus_action('monitor_list', 'deleteMonitor', 'click', {id: entity.id}) }}>
|
|
||||||
<twig:ux:icon
|
|
||||||
name="ic:twotone-cancel" width="18px"
|
|
||||||
class="rounded-full align-middle text-red-600"
|
|
||||||
title="Remove {{ entity.title }} from your Monitor list."
|
|
||||||
/>
|
|
||||||
</button>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</template>
|
|
||||||
</turbo-stream>
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block remove %}
|
{% block remove %}
|
||||||
|
|||||||
@@ -1,5 +1,11 @@
|
|||||||
<div{{ attributes.defaults(stimulus_controller('download_list')) }} class="min-w-48" >
|
<div{{ attributes.defaults(stimulus_controller('download_list', {isWidget: this.isWidget, perPage: this.perPage})) }} class="min-w-48" >
|
||||||
{% set table_body_id = (type == "complete") ? "complete_downloads" : "active_downloads" %}
|
{% set table_body_id = (type == "complete") ? "complete_downloads" : "active_downloads" %}
|
||||||
|
{% if this.isWidget == true and this.downloads.items|length > this.perPage %}
|
||||||
|
{% set show_view_all = true %}
|
||||||
|
{% else %}
|
||||||
|
{% set show_view_all = false %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<table id="downloads" class="divide-y divide-gray-200 bg-gray-50 overflow-hidden rounded-lg table-auto w-full" {{ turbo_stream_listen('App\\Download\\Framework\\Entity\\Download') }}>
|
<table id="downloads" class="divide-y divide-gray-200 bg-gray-50 overflow-hidden rounded-lg table-auto w-full" {{ turbo_stream_listen('App\\Download\\Framework\\Entity\\Download') }}>
|
||||||
<thead>
|
<thead>
|
||||||
<tr class="bg-orange-500 bg-filter bg-blur-lg bg-opacity-80 text-gray-950">
|
<tr class="bg-orange-500 bg-filter bg-blur-lg bg-opacity-80 text-gray-950">
|
||||||
@@ -31,50 +37,13 @@
|
|||||||
<tbody id="{{ table_body_id }}" class="divide-y divide-gray-200 dark:divide-gray-50">
|
<tbody id="{{ table_body_id }}" class="divide-y divide-gray-200 dark:divide-gray-50">
|
||||||
{% if this.downloads.items|length > 0 %}
|
{% if this.downloads.items|length > 0 %}
|
||||||
{% for download in this.downloads.items %}
|
{% for download in this.downloads.items %}
|
||||||
<tr id="ad_download_{{ download.id }}">
|
<twig:DownloadListRow download="{{ download }}" isWidget="{{ this.isWidget }}" perPage="{{ this.perPage }}" />
|
||||||
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-800 dark:text-stone-800 {% if this.isWidget == true %}min-w-[45ch] max-w-[45ch]{% endif %} truncate">
|
|
||||||
{{ download.title }}
|
|
||||||
</td>
|
|
||||||
|
|
||||||
{% if this.isWidget == false %}
|
|
||||||
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-800 dark:text-stone-800 truncate">
|
|
||||||
{{ download.filename }}
|
|
||||||
</td>
|
|
||||||
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-800 dark:text-stone-800 truncate">
|
|
||||||
{{ download.mediaType }}
|
|
||||||
</td>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
<td class="px-6 py-4 whitespace-nowrap text-sm align-middle text-gray-800 dark:text-gray-50">
|
|
||||||
{% if download.progress < 100 %}
|
|
||||||
<div class="border-2 border-green-700 rounded-md w-full h-6 align-middle overflow-hidden">
|
|
||||||
<div class="text-green-700 rounded-sm text-bold text-gray-950 text-center bg-green-600 h-5"
|
|
||||||
style="width:{{ download.progress }}%">
|
|
||||||
{{ download.progress }}%
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{% else %}
|
|
||||||
<twig:StatusBadge color="green" status="Complete" />
|
|
||||||
{% endif %}
|
|
||||||
</td>
|
|
||||||
<td class="px-6 py-4 flex flex-row align-middle justify-center">
|
|
||||||
<button {{ stimulus_action('download_list', 'deleteDownload', 'click', {id: download.id}) }}>
|
|
||||||
<twig:ux:icon
|
|
||||||
name="ic:twotone-cancel" width="18px"
|
|
||||||
class="rounded-full align-middle text-red-600"
|
|
||||||
title="Remove {{ download.title }} from your Download list. This will not delete the file."
|
|
||||||
/>
|
|
||||||
</button>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% if this.isWidget == true and this.downloads.items|length > this.perPage %}
|
<tr id="download_view_all" class="{{ show_view_all == false ?? "hidden" }}" {{ stimulus_target('download_list', 'viewAllBtn')}} >
|
||||||
<tr id="download_view_all">
|
<td class="py-2 whitespace-nowrap bg-orange-300 uppercase text-xs font-medium text-center text-black truncate" colspan="100%">
|
||||||
<td class="py-2 whitespace-nowrap bg-orange-300 uppercase text-xs font-medium text-center text-black truncate" colspan="100%">
|
<a href="{{ path('app_downloads') }}">View All Downloads</a>
|
||||||
<a href="{{ path('app_downloads') }}">View All Downloads</a>
|
</td>
|
||||||
</td>
|
</tr>
|
||||||
</tr>
|
|
||||||
{% endif %}
|
|
||||||
{% else %}
|
{% else %}
|
||||||
<tr id="{{ table_body_id }}_no_downloads">
|
<tr id="{{ table_body_id }}_no_downloads">
|
||||||
<td class="px-6 py-4 whitespace-nowrap text-xs uppercase text-center font-medium text-gray-800 dark:text-stone-800" colspan="100%">
|
<td class="px-6 py-4 whitespace-nowrap text-xs uppercase text-center font-medium text-gray-800 dark:text-stone-800" colspan="100%">
|
||||||
|
|||||||
36
templates/components/DownloadListRow.html.twig
Normal file
36
templates/components/DownloadListRow.html.twig
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
<tr{{ attributes }} id="ad_download_{{ download.id }}" {{ stimulus_target('download_list', 'downloadRow') }} isBroadcasted="{{ isBroadcasted ?? 'false' }}">
|
||||||
|
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-800 dark:text-stone-800 truncate">
|
||||||
|
{{ download.title }}
|
||||||
|
</td>
|
||||||
|
|
||||||
|
{% if isWidget == false %}
|
||||||
|
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-800 dark:text-stone-800 max-w-[60ch] truncate">
|
||||||
|
{{ download.filename }}
|
||||||
|
</td>
|
||||||
|
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-800 dark:text-stone-800 truncate">
|
||||||
|
{{ download.mediaType }}
|
||||||
|
</td>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<td class="px-6 py-4 whitespace-nowrap text-sm align-middle text-gray-800 dark:text-gray-50">
|
||||||
|
{% if download.progress < 100 %}
|
||||||
|
<div id="download_progress_{{ download.id }}" class="border-2 border-green-600 rounded-md text-center w-full h-6 align-middle overflow-hidden">
|
||||||
|
<div class="text-black text-center rounded-sm text-bold bg-green-300 h-5 relative z-10"
|
||||||
|
style="width:{{ download.progress }}%">
|
||||||
|
</div>
|
||||||
|
<div class="absolute text-black text-center" style="z-index: 400;margin-top: -1.25rem; margin-left: 1.2rem">{{ download.progress }}%</div>
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
<twig:StatusBadge color="green" status="Complete" />
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td class="px-6 py-4 flex flex-row align-middle justify-center">
|
||||||
|
<button {{ stimulus_action('download_list', 'deleteDownload', 'click', {id: download.id}) }}>
|
||||||
|
<twig:ux:icon
|
||||||
|
name="ic:twotone-cancel" width="18px"
|
||||||
|
class="rounded-full align-middle text-red-600"
|
||||||
|
title="Remove {{ download.title }} from your Download list. This will not delete the file."
|
||||||
|
/>
|
||||||
|
</button>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
@@ -36,50 +36,7 @@
|
|||||||
<tbody id="monitors" class="divide-y divide-gray-50">
|
<tbody id="monitors" class="divide-y divide-gray-50">
|
||||||
{% if this.monitors.items|length > 0 %}
|
{% if this.monitors.items|length > 0 %}
|
||||||
{% for monitor in this.monitors.items %}
|
{% for monitor in this.monitors.items %}
|
||||||
<tr id="monitor_{{ monitor.id }}">
|
<twig:MonitorListRow :monitor="monitor" />
|
||||||
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-stone-800 truncate">
|
|
||||||
{{ monitor.title }}
|
|
||||||
</td>
|
|
||||||
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-800">
|
|
||||||
{{ monitor|monitor_media_id }}
|
|
||||||
</td>
|
|
||||||
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-800">
|
|
||||||
{{ monitor.searchCount }}
|
|
||||||
</td>
|
|
||||||
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-800">
|
|
||||||
{{ monitor.createdAt|date('m/d/Y h:i a') }}
|
|
||||||
</td>
|
|
||||||
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-800">
|
|
||||||
{{ monitor.lastSearch|date('m/d/Y h:i a') }}
|
|
||||||
</td>
|
|
||||||
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-800">
|
|
||||||
{% if monitor.monitorType == "tvshow" %}
|
|
||||||
<twig:StatusBadge color="blue" number="300" text="black" status="{{ monitor.monitorType|monitor_type }}" />
|
|
||||||
{% elseif monitor.monitorType == "tvseason" %}
|
|
||||||
<twig:StatusBadge color="orange" number="300" text="black" status="{{ monitor.monitorType|monitor_type }}" />
|
|
||||||
{% else %}
|
|
||||||
<twig:StatusBadge color="rose" number="300" text="black" status="{{ monitor.monitorType|monitor_type }}" />
|
|
||||||
{% endif %}
|
|
||||||
</td>
|
|
||||||
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-800">
|
|
||||||
{% if monitor.status == "New" %}
|
|
||||||
<twig:StatusBadge color="orange" status="{{ monitor.status }}" />
|
|
||||||
{% elseif monitor.status == "In Progress" or monitor.status == "Active" %}
|
|
||||||
<twig:StatusBadge color="purple" status="{{ monitor.status }}" />
|
|
||||||
{% else %}
|
|
||||||
<twig:StatusBadge color="green" status="{{ monitor.status }}" />
|
|
||||||
{% endif %}
|
|
||||||
</td>
|
|
||||||
<td class="px-6 py-4 flex flex-row align-middle justify-center">
|
|
||||||
<button {{ stimulus_action('monitor_list', 'deleteMonitor', 'click', {id: monitor.id}) }}>
|
|
||||||
<twig:ux:icon
|
|
||||||
name="ic:twotone-cancel" width="18px"
|
|
||||||
class="rounded-full align-middle text-red-600"
|
|
||||||
title="Remove {{ monitor.title }} from your Monitor list."
|
|
||||||
/>
|
|
||||||
</button>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% if this.isWidget and this.monitors.items|length > 5 %}
|
{% if this.isWidget and this.monitors.items|length > 5 %}
|
||||||
<tr id="monitor_view_all">
|
<tr id="monitor_view_all">
|
||||||
|
|||||||
44
templates/components/MonitorListRow.html.twig
Normal file
44
templates/components/MonitorListRow.html.twig
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
<tr{{ attributes }} id="monitor_{{ monitor.id }}">
|
||||||
|
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-stone-800 truncate">
|
||||||
|
{{ monitor.title }}
|
||||||
|
</td>
|
||||||
|
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-800">
|
||||||
|
{{ monitor|monitor_media_id }}
|
||||||
|
</td>
|
||||||
|
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-800">
|
||||||
|
{{ monitor.searchCount }}
|
||||||
|
</td>
|
||||||
|
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-800">
|
||||||
|
{{ monitor.createdAt|date('m/d/Y h:i a') }}
|
||||||
|
</td>
|
||||||
|
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-800">
|
||||||
|
{{ monitor.lastSearch|date('m/d/Y h:i a') }}
|
||||||
|
</td>
|
||||||
|
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-800">
|
||||||
|
{% if monitor.monitorType == "tvshow" %}
|
||||||
|
<twig:StatusBadge color="blue" number="300" text="black" status="{{ monitor.monitorType|monitor_type }}" />
|
||||||
|
{% elseif monitor.monitorType == "tvseason" %}
|
||||||
|
<twig:StatusBadge color="orange" number="300" text="black" status="{{ monitor.monitorType|monitor_type }}" />
|
||||||
|
{% else %}
|
||||||
|
<twig:StatusBadge color="fuchsia" number="300" text="black" status="{{ monitor.monitorType|monitor_type }}" />
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-800">
|
||||||
|
{% if monitor.status == "New" %}
|
||||||
|
<twig:StatusBadge color="orange" status="{{ monitor.status }}" />
|
||||||
|
{% elseif monitor.status == "In Progress" or monitor.status == "Active" %}
|
||||||
|
<twig:StatusBadge color="purple" status="{{ monitor.status }}" />
|
||||||
|
{% else %}
|
||||||
|
<twig:StatusBadge color="green" status="{{ monitor.status }}" />
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td class="px-6 py-4 flex flex-row align-middle justify-center">
|
||||||
|
<button {{ stimulus_action('monitor_list', 'deleteMonitor', 'click', {id: monitor.id}) }}>
|
||||||
|
<twig:ux:icon
|
||||||
|
name="ic:twotone-cancel" width="18px"
|
||||||
|
class="rounded-full align-middle text-red-600"
|
||||||
|
title="Remove {{ monitor.title }} from your Monitor list."
|
||||||
|
/>
|
||||||
|
</button>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
Reference in New Issue
Block a user