diff --git a/CHANGELOG.md b/CHANGELOG.md index cdb821d..1f7c1e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,16 @@ Follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) · versioned wi --- +## [1.52.1] — 2026-09-22 + +### Fixed +- **Magazine: the page-grid column slider only changed card width, not thumbnail size.** A fixed thumbnail height meant fewer columns just left more empty space around the same small image instead of showing it bigger. The thumbnail now sizes by aspect ratio instead of a fixed height, so the slider is a real zoom. + +### Removed +- **Magazine: the page-coverage gap banner.** Redundant now that the "All pages" view's own per-card "no article" tag already says the same thing in context — it was a second warning repeating information already on screen. + +--- + ## [1.52.0] — 2026-09-22 ### Changed @@ -4409,7 +4419,8 @@ Initial feature-complete release. --- -[Unreleased]: https://github.com/mARTin-B78/tts-voice-creator-clone-and-design-2/compare/v1.52.0...HEAD +[Unreleased]: https://github.com/mARTin-B78/tts-voice-creator-clone-and-design-2/compare/v1.52.1...HEAD +[1.52.1]: https://github.com/mARTin-B78/tts-voice-creator-clone-and-design-2/compare/v1.52.0...v1.52.1 [1.52.0]: https://github.com/mARTin-B78/tts-voice-creator-clone-and-design-2/compare/v1.51.0...v1.52.0 [1.51.0]: https://github.com/mARTin-B78/tts-voice-creator-clone-and-design-2/compare/v1.50.0...v1.51.0 [1.50.0]: https://github.com/mARTin-B78/tts-voice-creator-clone-and-design-2/compare/v1.49.0...v1.50.0 diff --git a/VERSION b/VERSION index a63cb35..154cb93 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.52.0 +1.52.1 diff --git a/static/index.html b/static/index.html index 7eb8f00..524a149 100644 --- a/static/index.html +++ b/static/index.html @@ -10,7 +10,7 @@ - + @@ -27,12 +27,12 @@ - - - - - - + + + + + + @@ -403,7 +403,7 @@ window.toggleNavTree = function(treeId, chevronId) { - + diff --git a/static/js/magazine.js b/static/js/magazine.js index 0a9f4b1..0507999 100644 --- a/static/js/magazine.js +++ b/static/js/magazine.js @@ -621,28 +621,14 @@ function confidenceLabel(c) { } // ── Page coverage ──────────────────────────────────────────────────────── -// "Approve" only ever advances to the next ARTICLE, so a page that never +// "Approve" only ever advanced to the next ARTICLE, so a page that never // got grouped into any article -- an ad, a missed piece, a page the -// detection pass just skipped -- is never surfaced by that workflow at all. -// Confirmed live: 73 of 204 pages (36%) in one real issue belonged to no -// article whatsoever. This finds those gaps and gives a one-click way into -// Review at an arbitrary page, which the review UI already supports -// (magReviewGoMagazinePage is not bounded to the anchor article's own -// pages) -- the missing piece was purely that nothing pointed there. -function magUncoveredPageRanges() { - const total = state.doc?.pageCount || 0; - if (!total) return []; - const covered = new Set(); - state.articles.forEach((a) => (a.pages || []).forEach((p) => covered.add(p))); - const gaps = []; - let start = null; - for (let p = 1; p <= total; p++) { - if (!covered.has(p)) { if (start === null) start = p; } - else if (start !== null) { gaps.push([start, p - 1]); start = null; } - } - if (start !== null) gaps.push([start, total]); - return gaps; -} +// detection pass just skipped -- was never surfaced by that workflow at +// all. Confirmed live: 73 of 204 pages (36%) in one real issue belonged to +// no article whatsoever. A banner listing every such gap used to live here +// too, but the "All pages" view's own per-card "no article" tag already +// says the same thing in context, so it was just a second, redundant +// warning -- removed. // The next page after `afterPage` that still needs a human decision -- no // article covers it at all, or one does but is still sitting at its @@ -662,23 +648,6 @@ function magNextUnresolvedPage(afterPage) { return null; } -function renderCoverageBanner() { - const el = $('mag-coverage-banner'); - if (!el) return; - const gaps = magUncoveredPageRanges(); - if (!gaps.length) { el.hidden = true; el.innerHTML = ''; return; } - const pageCount = gaps.reduce((n, [a, b]) => n + (b - a + 1), 0); - el.hidden = false; - el.innerHTML = - ' ' + - '' + pageCount + ' page' + (pageCount === 1 ? '' : 's') + ' (' + gaps.length + ' gap' + (gaps.length === 1 ? '' : 's') + - ') ' + (pageCount === 1 ? "isn't" : "aren't") + ' part of any detected article, and will never come up just by approving articles one by one:' + - '' + - gaps.map(([a, b]) => '').join('') + - ''; -} - // Opens Review at a specific page even when no article covers it, by // anchoring on whichever approved-or-not article is nearest that page (the // review UI needs *an* article as context, but its own page navigation is @@ -717,7 +686,6 @@ function renderContents() { host.innerHTML = '

No articles yet. Run ingestion to detect them.

'; return; } - renderCoverageBanner(); const bySection = new Map(); state.articles.forEach((a) => { const key = a.section || 'Articles'; diff --git a/static/sections/s-magazine.html b/static/sections/s-magazine.html index d66026e..08ede58 100644 --- a/static/sections/s-magazine.html +++ b/static/sections/s-magazine.html @@ -84,7 +84,6 @@ -
diff --git a/static/style.css b/static/style.css index 011d226..9503f5d 100644 --- a/static/style.css +++ b/static/style.css @@ -4930,13 +4930,16 @@ input[list="lang-codes"] { .mag-bulkbar-progress { flex: 1; min-width: 0; } .mag-bulkbar-actions { display: flex; gap: 6px; margin-left: auto; } -.mag-coverage-banner { display: flex; align-items: flex-start; gap: 10px; flex-wrap: wrap; - padding: 10px 14px; margin-bottom: 12px; border: 1px solid var(--yellow, #d97706); border-radius: var(--radius); - background: color-mix(in srgb, var(--yellow, #d97706) 10%, var(--surface)); } -.mag-coverage-banner .mdi { color: var(--yellow, #d97706); flex-shrink: 0; margin-top: 2px; } -.mag-coverage-ranges { display: flex; flex-wrap: wrap; gap: 6px; } .mag-pages-grid { display: grid; grid-template-columns: repeat(var(--cols, 8), 1fr); gap: 12px; } -.mag-pages-grid .mag-card-thumb { height: 120px; } +/* A fixed thumbnail height (the article-thumbnail default) meant the column + slider only ever changed each card's WIDTH -- the page image itself sat + at the same small fixed size regardless, floating in a mostly-empty + card. aspect-ratio lets height follow width instead, so fewer columns + (wider cards) genuinely means bigger thumbnails, matching what "zoom" + should do. ~0.707 is ISO A4's width:height ratio -- close enough for a + real scanned page and much better than a guess when it's slightly off, + since object-fit: contain still letterboxes any mismatch cleanly. */ +.mag-pages-grid .mag-card-thumb { height: auto; aspect-ratio: 0.707 / 1; } .mag-cols-control { display: flex; align-items: center; gap: 6px; font-size: 13px; color: var(--subtext); } .mag-cols-control input[type="range"] { width: 90px; accent-color: var(--accent); } #mag-cols-value { min-width: 16px; text-align: right; }