diff --git a/CHANGELOG.md b/CHANGELOG.md index 27559ff..35efbd5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 0.45.5 - 2026-05-25 + +- Reworked the watchlist card action layout into two rows so `Refresh` and `Remove` sit on the first line, with `Download all` and `Auto-download` underneath for a less cluttered button group. + ## 0.45.4 - 2026-05-25 - Fixed watchlist-triggered downloads to stop forcing `ani-cli` search result indexes from the web API result order; explicit search-page selections still keep their chosen result, but watchlist and auto-download jobs now avoid bad `-S` mismatches when `ani-cli` resolves the title differently. diff --git a/README.md b/README.md index 79135ea..9cbcce9 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Small local web UI for a system-wide `ani-cli` install. -Current version: `0.45.4` +Current version: `0.45.5` ## Project Layout @@ -256,6 +256,7 @@ Main behavior: Auto-download layout note: `Name source` and `Name` share a wider half-and-half row inside the modal for easier editing. 11. Adding a show from Search reuses the current `Season` field as the initial auto-download series value for that new watchlist entry. 12. Each watchlist entry can be tagged as `TV` or `Movie`, which changes where finished downloads are stored. +13. Card actions are split into two rows so `Refresh` and `Remove` sit on the first line, with `Download all` and `Auto-download` on the second. Episode offset: diff --git a/VERSION b/VERSION index ac8f038..d5a5182 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.45.4 +0.45.5 diff --git a/app_support.py b/app_support.py index 9ad66aa..15d9b70 100644 --- a/app_support.py +++ b/app_support.py @@ -20,7 +20,7 @@ from uuid import uuid4 PROJECT_ROOT = Path(__file__).resolve().parent ANI_CLI = os.environ.get("ANI_CLI_BIN") or shutil.which("ani-cli") or "ani-cli" APP_NAME = "ani-cli-web" -VERSION = "0.45.4" +VERSION = "0.45.5" ALLANIME_BASE = "allanime.day" ALLANIME_API = f"https://api.{ALLANIME_BASE}" ALLANIME_REFERER = "https://allmanga.to" diff --git a/test_app.py b/test_app.py index ecbacbc..a819ee8 100644 --- a/test_app.py +++ b/test_app.py @@ -2594,6 +2594,9 @@ class TemplateHelperTests(unittest.TestCase): self.assertIn('downloadPicker.classList.toggle("visible")', APP.WATCHLIST_HTML) self.assertIn('downloadWatchlistItem(item, "sub"', APP.WATCHLIST_HTML) self.assertIn('downloadWatchlistItem(item, "dub"', APP.WATCHLIST_HTML) + self.assertIn("grid-template-columns: repeat(2, minmax(0, 1fr));", APP.WATCHLIST_HTML) + self.assertLess(APP.WATCHLIST_HTML.index(''), APP.WATCHLIST_HTML.index('')) + self.assertLess(APP.WATCHLIST_HTML.index(''), APP.WATCHLIST_HTML.index('')) def test_watchlist_page_renders_alternative_titles_toggle(self): self.assertIn("Alternative titles", APP.WATCHLIST_HTML) diff --git a/watchlist_page.py b/watchlist_page.py index 03cc883..6fbbae4 100644 --- a/watchlist_page.py +++ b/watchlist_page.py @@ -639,7 +639,7 @@ WATCHLIST_HTML = r""" } .card-actions { display: grid; - grid-template-columns: repeat(4, minmax(0, 1fr)); + grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; } .card-actions button { @@ -1374,9 +1374,9 @@ WATCHLIST_HTML = r"""
+ -
@@ -1426,9 +1426,9 @@ WATCHLIST_HTML = r""" }); const actionButtons = card.querySelector(".card-actions").querySelectorAll("button"); const refreshBtn = actionButtons[0]; - const downloadBtn = actionButtons[1]; - const autoDownloadBtn = actionButtons[2]; - const removeBtn = actionButtons[3]; + const removeBtn = actionButtons[1]; + const downloadBtn = actionButtons[2]; + const autoDownloadBtn = actionButtons[3]; const subBtn = actionButtons[4]; const dubBtn = actionButtons[5]; const downloadPicker = card.querySelector(".download-picker");