diff --git a/assets/bootstrap.js b/assets/bootstrap.js index 7aacd6f..26a3bfa 100644 --- a/assets/bootstrap.js +++ b/assets/bootstrap.js @@ -3,6 +3,7 @@ import PreviewContentDialog from "./components/preview-content-dialog.js"; import EpisodeContainer from './components/episode-container.js'; import DownloadOptionTr from './components/download-option-tr.js'; import DownloadListRow from './components/download-list-row.js'; +import MonitorListRow from './components/monitor-list-row.js'; import MovieContainer from "./components/movie-container.js"; import { startStimulusApp } from '@symfony/stimulus-bundle'; @@ -22,3 +23,4 @@ customElements.define('episode-container', EpisodeContainer); customElements.define('movie-container', MovieContainer); customElements.define('dl-tr', DownloadOptionTr, {extends: 'tr'}); customElements.define('download-list-row', DownloadListRow, {extends: 'tr'}); +customElements.define('monitor-list-row', MonitorListRow, {extends: 'tr'}); diff --git a/assets/components/monitor-list-row.js b/assets/components/monitor-list-row.js new file mode 100644 index 0000000..e7e20eb --- /dev/null +++ b/assets/components/monitor-list-row.js @@ -0,0 +1,115 @@ +export default class MonitorListRow extends HTMLTableRowElement { + constructor() { + super(); + this.downloadId = this.getAttribute('monitor-id'); + this.imdbId = this.getAttribute('imdb-id'); + this.mediaTitle = this.getAttribute('media-title'); + this.url = this.getAttribute('url'); + this.filename = this.getAttribute('filename'); + this.status = this.getAttribute('status'); + this.progress = this.getAttribute('progress'); + this.mediaType = this.getAttribute('media-type'); + this.episodeId = this.getAttribute('episode-id'); + this.createdAt = this.getAttribute('created-at'); + this.updatedAt = this.getAttribute('updated-at'); + } + + static get observedAttributes() { + return ['download-id', 'imdb-id', 'media-title', 'url', 'filename', 'status', 'progress', 'media-type', 'episode-id', 'created-at', 'updated-at']; + } + + attributeChangedCallback(name, oldValue, newValue) { + if (oldValue !== newValue) { + this[name] = newValue; + this.setAttribute(name, newValue); + this.setPreviewContent(); + } + } + + setPreviewContent() { + this.previewContent = ` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
ID
+
+
IMDB ID
+
+
Title
+
+
Season
+
+
Episode
+
+
Status
+
+
Search Count
+
+
Media Type
+
+
Episode ID
+
+
Created At
+
+
Updated At
+
+
Downloaded At
+
+
${this.getAttribute('monitor-id') ?? "-"}
+
+
${this.getAttribute('imdb-id') ?? "-"}
+
+
${this.getAttribute('media-title') ?? "-"}
+
+
${this.getAttribute('season') ?? "-"}
+
+
${this.getAttribute('episode') ?? "-"}
+
+
${this.getAttribute('status') ?? "-"}
+
+
${this.getAttribute('search-count') ?? "-"}
+
+
${this.getAttribute('media-type') ?? "-"}
+
+
${this.getAttribute('episode-id') ?? "-"}
+
+
${this.getAttribute('created-at') ?? "-"}
+
+
${this.getAttribute('last-search') ?? "-"}
+
+
${this.getAttribute('downloaded-at') ?? "-"}
+
+ `; + } +} \ No newline at end of file diff --git a/assets/components/preview-content-dialog.js b/assets/components/preview-content-dialog.js index aea5444..5ff1885 100644 --- a/assets/components/preview-content-dialog.js +++ b/assets/components/preview-content-dialog.js @@ -12,11 +12,11 @@ export default class PreviewContentDialog extends HTMLDialogElement { this.setHeading = this.setHeading.bind(this); this.setContent = this.setContent.bind(this); + this.#closeBtnEl.addEventListener('click', () => this.close()); + document.addEventListener('hidePreviewContentModal', () => this.close()); document.addEventListener('showPreviewContentModal', (event) => { this.display(event.detail); }); - document.addEventListener('hidePreviewContentModal', (e) => this.close()); - this.#closeBtnEl.addEventListener('click', () => this.close()); } setHeading(heading) { diff --git a/assets/controllers/download_list_controller.js b/assets/controllers/download_list_controller.js index 50d46ec..a2a7cca 100644 --- a/assets/controllers/download_list_controller.js +++ b/assets/controllers/download_list_controller.js @@ -41,23 +41,20 @@ export default class extends Controller { downloadTargetConnected(target) { let downloads = this.element.querySelectorAll('tbody tr'); - console.log(target) - downloads.forEach(download => { download.addEventListener('click', (event) => { - // let previewContentModal = document.querySelector('#previewContentModal'); let content, heading = "" if (event.target.tagName !== "TR") { content = event.target.parentElement.previewContent; - heading = event.target.parentElement.mediaTitle; + heading = "Download # " + event.target.parentElement.downloadId + " - \"" + event.target.parentElement.mediaTitle + "\""; } else { content = event.target.previewContent; - heading = event.target.mediaTitle; + heading = "Download for # " + event.target.downloadId + " - \"" + event.target.mediaTitle + "\""; } - console.log(content) - - document.dispatchEvent(new CustomEvent('showPreviewContentModal', {detail: {heading: heading, content: content}})) + if (null !== content && undefined !== content && "" !== content) { + document.dispatchEvent(new CustomEvent('showPreviewContentModal', {detail: {heading: heading, content: content}})) + } }) }) } diff --git a/assets/controllers/monitor_list_controller.js b/assets/controllers/monitor_list_controller.js index 8de6b07..0c9e2ab 100644 --- a/assets/controllers/monitor_list_controller.js +++ b/assets/controllers/monitor_list_controller.js @@ -6,6 +6,29 @@ import { Controller } from '@hotwired/stimulus'; */ /* stimulusFetch: 'lazy' */ export default class extends Controller { + static targets = ['monitorList'] + + monitorListTargetConnected(target) { + let monitors = this.element.querySelectorAll('tbody tr'); + + monitors.forEach(monitor => { + monitor.addEventListener('click', (event) => { + let content, heading = "" + if (event.target.tagName !== "TR") { + content = event.target.parentElement.previewContent; + heading = "Monitor for \"" + event.target.parentElement.mediaTitle+ "\""; + } else { + content = event.target.previewContent; + heading = "Monitor for \"" + event.target.mediaTitle + "\""; + } + + if (null !== content && undefined !== content && "" !== content) { + document.dispatchEvent(new CustomEvent('showPreviewContentModal', {detail: {heading: heading, content: content}})) + } + }) + }) + } + deleteMonitor(data) { fetch(`/api/monitor/${data.params.id}`, {method: 'DELETE'}) .then(res => res.json()) diff --git a/assets/styles/app.css b/assets/styles/app.css index 3de5a72..cf2acbf 100644 --- a/assets/styles/app.css +++ b/assets/styles/app.css @@ -55,6 +55,10 @@ dialog { } } +dialog[open] { + animation: fade-in 100ms ease-in forwards; +} + /* Add animations */ dialog[data-dialog-target="dialog"][open] { animation: fade-in 200ms forwards; diff --git a/templates/base.html.twig b/templates/base.html.twig index d19b91c..c647d2b 100644 --- a/templates/base.html.twig +++ b/templates/base.html.twig @@ -30,5 +30,6 @@ {% block body %}{% endblock %} + diff --git a/templates/components/DownloadListRow.html.twig b/templates/components/DownloadListRow.html.twig index 2a4009d..6d7746e 100644 --- a/templates/components/DownloadListRow.html.twig +++ b/templates/components/DownloadListRow.html.twig @@ -1,5 +1,15 @@ diff --git a/templates/components/MonitorList.html.twig b/templates/components/MonitorList.html.twig index f135013..21c27d0 100644 --- a/templates/components/MonitorList.html.twig +++ b/templates/components/MonitorList.html.twig @@ -4,7 +4,9 @@ {% endif %} - +
+ +
- + - - {% endblock %}