From e26d3f6edbd76d54c52501e358771d17b91faa85 Mon Sep 17 00:00:00 2001 From: DariusIII Date: Mon, 9 Feb 2026 10:36:38 +0100 Subject: [PATCH] Update for alpine.js --- app/Http/Controllers/MyMoviesController.php | 2 +- app/Models/UserMovie.php | 7 +- .../js/alpine/components/confirm-link.js | 88 +++++++++++++++++++ resources/js/alpine/index.js | 2 + .../views/admin/categories/edit.blade.php | 6 +- .../views/admin/categories/index.blade.php | 14 +-- .../views/admin/comments/index.blade.php | 24 ++--- .../views/admin/invitations/show.blade.php | 11 ++- .../promotions/show-statistics.blade.php | 18 +--- .../admin/promotions/statistics.blade.php | 18 +--- .../admin/release-reports/index.blade.php | 8 +- resources/views/admin/roles/index.blade.php | 5 +- resources/views/api/apidesc.blade.php | 26 +----- resources/views/api/apiv2desc.blade.php | 27 +----- resources/views/mymovies/add.blade.php | 8 -- resources/views/mymovies/index.blade.php | 35 ++++---- resources/views/myshows/index.blade.php | 35 ++++---- resources/views/profile/edit.blade.php | 35 ++------ 18 files changed, 190 insertions(+), 179 deletions(-) create mode 100644 resources/js/alpine/components/confirm-link.js diff --git a/app/Http/Controllers/MyMoviesController.php b/app/Http/Controllers/MyMoviesController.php index ecfa7e193..c38afcf01 100644 --- a/app/Http/Controllers/MyMoviesController.php +++ b/app/Http/Controllers/MyMoviesController.php @@ -122,7 +122,7 @@ class MyMoviesController extends BasePageController $this->viewData['type'] = 'edit'; $this->viewData['cat_ids'] = array_keys($categories); $this->viewData['cat_names'] = $categories; - $this->viewData['cat_selected'] = explode('|', $movie['categories']); + $this->viewData['cat_selected'] = ! empty($movie['categories']) ? explode('|', $movie['categories']) : []; $this->viewData['imdbid'] = $imdbid; $this->viewData['movie'] = $movie; $this->viewData['content'] = view('mymovies.add', $this->viewData)->render(); diff --git a/app/Models/UserMovie.php b/app/Models/UserMovie.php index f5654a7ff..4d1425453 100644 --- a/app/Models/UserMovie.php +++ b/app/Models/UserMovie.php @@ -75,11 +75,12 @@ class UserMovie extends Model public static function getMovie($uid, $imdbid): array { - return self::query() + $result = self::query() ->where(['user_movies.users_id' => $uid, 'user_movies.imdbid' => $imdbid]) ->leftJoin('movieinfo as mi', 'mi.imdbid', '=', 'user_movies.imdbid') - ->get(['user_movies.*', 'mi.title']) - ->toArray(); + ->first(['user_movies.*', 'mi.title']); + + return $result ? $result->toArray() : []; } public static function delMovieForUser($uid) diff --git a/resources/js/alpine/components/confirm-link.js b/resources/js/alpine/components/confirm-link.js new file mode 100644 index 000000000..f484fc469 --- /dev/null +++ b/resources/js/alpine/components/confirm-link.js @@ -0,0 +1,88 @@ +/** + * Alpine.data('confirmLink') - Confirm before navigating to a URL + * Uses the styled confirmation modal instead of native confirm() + * Usage: x-data="confirmLink" data-url="/path" data-message="Are you sure?" data-title="Confirm" data-type="danger" + */ +import Alpine from '@alpinejs/csp'; + +Alpine.data('confirmLink', () => ({ + url: '', + message: 'Are you sure?', + title: 'Confirm Action', + type: 'danger', + confirmText: 'Delete', + cancelText: 'Cancel', + + init() { + this.url = this.$el.dataset.url || this.$el.href || ''; + this.message = this.$el.dataset.message || 'Are you sure?'; + this.title = this.$el.dataset.title || 'Confirm Action'; + this.type = this.$el.dataset.type || 'danger'; + this.confirmText = this.$el.dataset.confirmText || 'Delete'; + this.cancelText = this.$el.dataset.cancelText || 'Cancel'; + }, + + navigate() { + const url = this.url; + if (typeof window.showConfirm === 'function') { + window.showConfirm({ + title: this.title, + message: this.message, + type: this.type, + confirmText: this.confirmText, + cancelText: this.cancelText, + onConfirm: function() { + window.location.href = url; + } + }); + } else { + // Fallback to native confirm if modal not available + if (confirm(this.message)) { + window.location.href = url; + } + } + } +})); + +/** + * Alpine.data('confirmForm') - Confirm before submitting a form + * Uses the styled confirmation modal instead of native confirm() + * Usage on form: x-data="confirmForm" data-message="Are you sure?" data-title="Confirm" data-type="warning" + */ +Alpine.data('confirmForm', () => ({ + message: 'Are you sure?', + title: 'Confirm Action', + type: 'warning', + confirmText: 'Confirm', + cancelText: 'Cancel', + + init() { + this.message = this.$el.dataset.message || 'Are you sure?'; + this.title = this.$el.dataset.title || 'Confirm Action'; + this.type = this.$el.dataset.type || 'warning'; + this.confirmText = this.$el.dataset.confirmText || 'Confirm'; + this.cancelText = this.$el.dataset.cancelText || 'Cancel'; + }, + + submit() { + const form = this.$el; + if (typeof window.showConfirm === 'function') { + window.showConfirm({ + title: this.title, + message: this.message, + type: this.type, + confirmText: this.confirmText, + cancelText: this.cancelText, + onConfirm: function() { + form.submit(); + } + }); + } else { + // Fallback to native confirm if modal not available + if (confirm(this.message)) { + form.submit(); + } + } + } +})); + diff --git a/resources/js/alpine/index.js b/resources/js/alpine/index.js index 6549c73c4..480a2fdc4 100644 --- a/resources/js/alpine/index.js +++ b/resources/js/alpine/index.js @@ -36,6 +36,8 @@ import './components/search-autocomplete.js'; import './components/quality-filter.js'; import './components/content-toggle.js'; import './components/movies-layout.js'; +import './components/movies-page.js'; +import './components/confirm-link.js'; // --- Page-specific components --- import './components/release-report.js'; diff --git a/resources/views/admin/categories/edit.blade.php b/resources/views/admin/categories/edit.blade.php index 5b3b8bded..c3f9e0274 100644 --- a/resources/views/admin/categories/edit.blade.php +++ b/resources/views/admin/categories/edit.blade.php @@ -121,10 +121,10 @@
- + diff --git a/resources/views/admin/categories/index.blade.php b/resources/views/admin/categories/index.blade.php index 14b2dbabf..7c30a9870 100644 --- a/resources/views/admin/categories/index.blade.php +++ b/resources/views/admin/categories/index.blade.php @@ -119,7 +119,7 @@ @@ -156,12 +156,16 @@
-