.related-title/.related-meta (the "Gists from X"/"Projects from X"/ "Related Discussions" preview lines in the post-page sidebar) had no overflow protection at all - no overflow, word-break, text-overflow, or min-width. They're plain-text previews from content_preview(), not run through the render_content markdown pipeline that normal post/ comment bodies get (which already has word-break: break-word) - so this bug was unique to these sidebar previews. Combined with .related-link being a flex-direction: column container with align-items: flex-start, each line sizes to its own content width instead of the card's, so one long unbroken token (a URL) runs past the card edge with nothing to stop it. Reported case (a project description ending in a bare GitHub URL) happens to fit by half a pixel in one exact browser/width/font combination, which is why it doesn't always reproduce - proved the underlying CSS is still unsafe by reproducing the real content in an isolated harness against the actual CSS and forcing a worst-case unbroken string: it overflowed the card by 72px. Added min-width: 0 to .related-link and single-line ellipsis truncation (max-width: 100%, overflow: hidden, text-overflow: ellipsis, white-space: nowrap) to both .related-title and .related-meta - the same pattern already used correctly by the messages conversation list. Checked every other consumer of content_preview() and every visually similar flex-column card sitewide; this was the only remaining gap. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Vnp7vzE4hvsytMo5YjszJm
62 lines
1.3 KiB
TOML
62 lines
1.3 KiB
TOML
[project]
|
|
name = "devplacepy"
|
|
version = "1.0.12"
|
|
description = "DevPlace - The Developer Social Network"
|
|
requires-python = ">=3.12"
|
|
dependencies = [
|
|
"fastapi",
|
|
"uvicorn[standard]",
|
|
"jinja2",
|
|
"python-multipart",
|
|
"dataset",
|
|
"passlib[bcrypt]",
|
|
"python-dotenv",
|
|
"aiofiles",
|
|
"httpx[http2]",
|
|
"curl_cffi",
|
|
"brotli",
|
|
"zstandard",
|
|
"cryptography",
|
|
"PyJWT",
|
|
"multiavatar",
|
|
"locust",
|
|
"Pillow",
|
|
"imagehash",
|
|
"uuid_utils",
|
|
"mistune",
|
|
"emoji",
|
|
"pypdf",
|
|
"playwright",
|
|
"playwright-stealth",
|
|
"chromadb",
|
|
"weasyprint",
|
|
"cairosvg",
|
|
"sqlglot",
|
|
"curl_cffi",
|
|
"faker",
|
|
"defusedxml",
|
|
]
|
|
|
|
[project.scripts]
|
|
devplace = "devplacepy.cli:main"
|
|
devii = "devplacepy.services.devii.cli:main"
|
|
devplace-xmlrpc = "devplacepy.services.xmlrpc.server:main"
|
|
|
|
[project.optional-dependencies]
|
|
dev = ["pytest", "playwright", "requests", "coverage"]
|
|
bots = ["playwright", "faker"]
|
|
|
|
[build-system]
|
|
requires = ["hatchling"]
|
|
build-backend = "hatchling.build"
|
|
|
|
[tool.pytest.ini_options]
|
|
testpaths = ["tests/unit", "tests/api", "tests/e2e"]
|
|
python_files = ["*.py"]
|
|
addopts = "--tb=line -rf -p no:xdist"
|
|
filterwarnings = [
|
|
"ignore:'crypt' is deprecated",
|
|
"ignore:Using `httpx` with `starlette.testclient` is deprecated",
|
|
"ignore:invalid escape sequence",
|
|
]
|