Repository navigation
Fix apostrophe in PyCon Côte d'Ivoire entry - #512
Conversation
|
Routine review Request. Title only, no body and no linked issue: "Fix apostrophe in PyCon Côte d'Ivoire entry". That covers one instance, the PyCon Côte d'Ivoire 2027 entry in Checked against. Today is Mon Oct 19 12:37:16 UTC 2026 ( Needs your decision.
Findings. Important
Nits
Tests. No test covers the request's invariant: a conference page must render valid JS for names or places that contain an apostrophe. There is no fix test to run against the base.
Bounds. I got the change from the API diff and checked out Generated by Claude Code |
* Escape conference text in inline JavaScript with jsonify
Liquid pastes values verbatim, so `place: '{{conf.place}}'` rendered as
`place: 'Abidjan, Côte d'Ivoire'` and the front page's per-conference
script failed to parse. The curly apostrophe in #512 fixed the name but
not the place, so the front page and the PyCon Côte d'Ivoire page still
threw a SyntaxError.
Every conference name, place and link that reaches JavaScript now goes
through jsonify, the way head.html and the JSON-LD block already do.
tests/test_template_escaping.py fails when a free-text conference field
lands in a script without jsonify or slugify, or when a jsonify'd value
is wrapped in quotes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YSanwpb5BXzbhLxMFyz9yS
* Match script end tags with whitespace or attributes in the template test
CodeQL (py/bad-tag-filter) flagged that `</script>` misses `</script >`.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YSanwpb5BXzbhLxMFyz9yS
* Escape conference text in HTML attributes and reset the extended label
Free text in a double-quoted attribute ended the value at the first ",
so data-conf-name, data-location, aria-label, meta content and the share
and map links now go through escape, or url_encode where the value is
part of a URL. The share links replace url_encode's + with %20, which
mailto: needs and the other targets accept. URL fields stay as they are:
the schema validates them and pydantic percent-encodes quotes in them.
The front page's action bar got the name and place through include
parameters, and the extra places through a for loop, so the template test
now follows include parameters and variables set with assign or for.
calendar.js never reset `extended`, so every conference after the first
extended CfP was labelled "(extended)" too: 66 labels for 16 extended
CfPs. It now resets the way calendar-deadlines.ics already does.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YSanwpb5BXzbhLxMFyz9yS
---------
Co-authored-by: Claude <noreply@anthropic.com>
No description provided.