Reader page sizing was height-driven — `max-height: 90vh` in single mode and unbounded natural width in continuous mode. A long vertical page hit the height cap first and, preserving aspect ratio, collapsed into a thin vertical stripe; narrow and wide scans rendered at different widths. Switch both modes to width-driven sizing via a capped `--reader-page-width` reading column (min(100%, 700px)): every page renders at the same width regardless of intrinsic dimensions, and tall pages extend downward and scroll instead of shrinking. Top-align the single-mode grid and make the prev/next chevrons sticky so they stay reachable on a long page. Add a Playwright spec asserting equal rendered width across differently- proportioned pages and that a tall page exceeds the viewport height. The page-context-menu fixture served a 1x1 image that now renders as a 700x700 square taller than the viewport, making Playwright scroll it into view before right-clicking — a synthetic scroll that trips the menu's by-design close-on-scroll. Give that fixture a realistic landscape aspect so the page fits the viewport, matching real user behaviour (no scroll on right-click). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
75 lines
2.4 KiB
TOML
75 lines
2.4 KiB
TOML
[package]
|
||
name = "mangalord"
|
||
version = "0.94.1"
|
||
edition = "2021"
|
||
default-run = "mangalord"
|
||
|
||
[lib]
|
||
path = "src/lib.rs"
|
||
|
||
[[bin]]
|
||
name = "mangalord"
|
||
path = "src/main.rs"
|
||
|
||
[[bin]]
|
||
name = "crawler"
|
||
path = "src/bin/crawler.rs"
|
||
|
||
[dependencies]
|
||
axum = { version = "0.7", features = ["macros", "multipart"] }
|
||
tokio = { version = "1", features = ["full"] }
|
||
sqlx = { version = "0.8", features = ["runtime-tokio", "postgres", "uuid", "chrono", "macros", "migrate"] }
|
||
serde = { version = "1", features = ["derive"] }
|
||
serde_json = "1"
|
||
uuid = { version = "1", features = ["v4", "serde"] }
|
||
chrono = { version = "0.4", features = ["serde"] }
|
||
chrono-tz = "0.9"
|
||
tracing = "0.1"
|
||
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
|
||
tower = { version = "0.5", features = ["util"] }
|
||
tower-http = { version = "0.6", features = ["trace", "cors"] }
|
||
thiserror = "1"
|
||
anyhow = "1"
|
||
async-trait = "0.1"
|
||
dotenvy = "0.15"
|
||
argon2 = "0.5"
|
||
rand = "0.8"
|
||
sha2 = "0.10"
|
||
subtle = "2"
|
||
base64 = "0.22"
|
||
# Image decode + downscale for the analysis worker (keep the page image
|
||
# under the local vision model's token budget). Only the manga page formats.
|
||
image = { version = "0.25", default-features = false, features = ["jpeg", "png", "webp"] }
|
||
axum-extra = { version = "0.9", features = ["cookie", "typed-header"] }
|
||
time = "0.3"
|
||
infer = "0.16"
|
||
tokio-util = { version = "0.7", features = ["io"] }
|
||
futures-core = "0.3"
|
||
futures-util = "0.3"
|
||
bytes = "1"
|
||
chromiumoxide = { version = "0.7", features = ["tokio-runtime", "_fetcher-rusttls-tokio"], default-features = false }
|
||
sysinfo = { version = "0.32", default-features = false, features = ["system", "component"] }
|
||
nix = { version = "0.29", features = ["fs"] }
|
||
scraper = "0.20"
|
||
reqwest = { version = "0.12", default-features = false, features = ["rustls-tls", "socks", "cookies", "stream", "json"] }
|
||
ocrs = "0.12"
|
||
rten = "0.24"
|
||
|
||
[dev-dependencies]
|
||
tempfile = "3"
|
||
tower = { version = "0.5", features = ["util"] }
|
||
http-body-util = "0.1"
|
||
mime = "0.3"
|
||
futures-util = "0.3"
|
||
tokio = { version = "1", features = ["test-util"] }
|
||
|
||
# Trim debug builds: keep line numbers in panics / backtraces but drop the
|
||
# full DWARF info (variable-level inspection in gdb/lldb). With a sqlx +
|
||
# axum + tokio dep tree the default ("full") leaves backend/target on the
|
||
# order of tens of GiB; this typically cuts ~50–70% off that.
|
||
[profile.dev]
|
||
debug = "line-tables-only"
|
||
|
||
[profile.test]
|
||
debug = "line-tables-only"
|