diff --git a/CHANGELOG.md b/CHANGELOG.md index 57b4fd4..dff6683 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 0.40.2 - 2026-05-25 + +- Replaced the inline `Alternative titles` expansion with a centered overlay dialog so opening AniDB title variants no longer shifts the watchlist layout. + ## 0.40.1 - 2026-05-25 - Replaced the per-card auto-download expansion with a centered overlay dialog so opening settings no longer shifts the watchlist grid layout. diff --git a/README.md b/README.md index ca2e299..f2f59e9 100644 --- a/README.md +++ b/README.md @@ -223,7 +223,7 @@ Main behavior: 6. Each card has an inline category selector. 7. Summary cards show total tracked shows plus `sub` and `dub` counts. 8. Pagination shows 30 cards per page. -9. `Alternative titles` expands English alternate titles from AniDB when the watchlist refresh can match the show to an AniDB entry. +9. `Alternative titles` opens a centered overlay with English alternate titles from AniDB when the watchlist refresh can match the show to an AniDB entry. 10. `Auto-download` opens a centered overlay with per-series settings for language, quality, series number, and the sanitized library name used for automatically queued episodes. Status behavior: diff --git a/VERSION b/VERSION index d0a1915..385bb68 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.40.1 +0.40.2 diff --git a/app_support.py b/app_support.py index 2ccfc52..5966bd0 100644 --- a/app_support.py +++ b/app_support.py @@ -19,7 +19,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.40.1" +VERSION = "0.40.2" 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 79cb70c..6217fb8 100644 --- a/test_app.py +++ b/test_app.py @@ -1981,7 +1981,9 @@ class TemplateHelperTests(unittest.TestCase): def test_watchlist_page_renders_alternative_titles_toggle(self): self.assertIn("Alternative titles", APP.WATCHLIST_HTML) self.assertIn('class="ghost alt-titles-toggle"', APP.WATCHLIST_HTML) - self.assertIn('altTitlesPanel.classList.toggle("open")', APP.WATCHLIST_HTML) + self.assertIn('id="altTitlesOverlay"', APP.WATCHLIST_HTML) + self.assertIn("openAltTitlesOverlay(item)", APP.WATCHLIST_HTML) + self.assertIn("closeAltTitlesOverlay()", APP.WATCHLIST_HTML) self.assertIn("AniDB English alternative titles were not available for this show.", APP.WATCHLIST_HTML) def test_watchlist_page_renders_auto_download_editor(self): diff --git a/watchlist_page.py b/watchlist_page.py index 537a634..bb3ed0c 100644 --- a/watchlist_page.py +++ b/watchlist_page.py @@ -501,10 +501,6 @@ WATCHLIST_HTML = r""" line-height: 1.35; white-space: pre-line; } - .alt-titles { - display: grid; - gap: 8px; - } .alt-titles-toggle { width: 100%; min-height: 34px; @@ -513,16 +509,31 @@ WATCHLIST_HTML = r""" font-weight: 700; justify-content: center; } - .alt-titles-panel { - display: none; - gap: 8px; - border: 1px solid var(--line); - border-radius: 14px; - background: rgba(255, 255, 255, 0.04); - padding: 10px; - } - .alt-titles-panel.open { + .alt-titles-modal { + width: min(640px, 100%); display: grid; + gap: 14px; + border: 1px solid var(--line); + border-radius: 22px; + background: linear-gradient(180deg, rgba(20, 27, 40, 0.98), rgba(12, 17, 28, 0.98)); + box-shadow: 0 24px 70px rgba(0, 0, 0, 0.45); + padding: 18px; + } + .alt-titles-modal-header { + display: flex; + justify-content: space-between; + align-items: flex-start; + gap: 12px; + } + .alt-titles-modal-header p { + margin: 4px 0 0; + } + .alt-titles-modal-close { + min-width: 36px; + min-height: 36px; + border-radius: 999px; + font-size: 18px; + line-height: 1; } .alt-titles-list { display: flex; @@ -764,6 +775,20 @@ WATCHLIST_HTML = r""" + +