<feed xmlns='http://www.w3.org/2005/Atom'>
<title>cccms/config, branch master</title>
<subtitle>[no description]</subtitle>
<id>http://erdgeist.org/gitweb/cccms/atom?h=master</id>
<link rel='self' href='http://erdgeist.org/gitweb/cccms/atom?h=master'/>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/'/>
<updated>2026-08-20T15:37:01Z</updated>
<entry>
<title>Surface redirects in nodes#show, the action log and when publishing</title>
<updated>2026-08-20T15:37:01Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-08-20T15:37:01Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=a1794d3087e6cbd228f3641e7313815d8c59695f'/>
<id>urn:sha1:a1794d3087e6cbd228f3641e7313815d8c59695f</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Add redirect ui in in nodes#edit and apply some minor cleanup</title>
<updated>2026-08-20T10:50:30Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-08-20T10:50:30Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=a8cf725312d245d8d1f1df0fff22718975ce249e'/>
<id>urn:sha1:a8cf725312d245d8d1f1df0fff22718975ce249e</id>
<content type='text'>
Also give search inputs a magnifier and a clear control: input_group
wraps a field with an icon and, where clearing is meaningful, a
button that empties it and any hidden companion named by data-clears.

Clean up some inconistency between field hints presented as p and as
span.

Remove stray console.log.
</content>
</entry>
<entry>
<title>Redirect a page to a node or an external URL</title>
<updated>2026-08-19T14:05:40Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-08-19T14:05:40Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=4df88b601b1900c287051d827eaff46f498f60d0'/>
<id>urn:sha1:4df88b601b1900c287051d827eaff46f498f60d0</id>
<content type='text'>
Page#redirect_target resolves the precedence and returns nil for a
destination that is restricted or has no head, so a page with a broken
target renders itself rather than linking nowhere. The banner partial will
call the same method, so the redirect and the link cannot drift.

One hop, no exceptions, checked in publish_draft! rather than as a
validation: two nodes publishing concurrently could each pass a save-time
check and still produce a chain. "Live" means heads only, a draft redirect
that has not published is not yet a link anyone can follow.

Node.search excludes redirecting pages. editor_search does not: an editor
looking for one searches by title, and only the body is worth hiding.
</content>
</entry>
<entry>
<title>Import Markdown into the editor</title>
<updated>2026-08-16T20:56:09Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-08-16T20:56:09Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=bbd10eec6b8b46a7173d3be4dd7e05de212f8038'/>
<id>urn:sha1:bbd10eec6b8b46a7173d3be4dd7e05de212f8038</id>
<content type='text'>
Use a vendored marked to import Markdown documents into tinymce.
</content>
</entry>
<entry>
<title>Style totp input fields so that they work better on mobile</title>
<updated>2026-08-15T14:28:21Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-08-15T14:28:21Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=445362ed2f8591d54a3c34cb3c5a69049aefa8c6'/>
<id>urn:sha1:445362ed2f8591d54a3c34cb3c5a69049aefa8c6</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Restore from and redesign the trash list</title>
<updated>2026-08-14T22:34:14Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-08-14T22:34:14Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=d15dc3f1d2c9421c44d2c82c08b44d84459fcaaf'/>
<id>urn:sha1:d15dc3f1d2c9421c44d2c82c08b44d84459fcaaf</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Retire conventions overview page</title>
<updated>2026-08-14T18:14:46Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-08-14T18:14:46Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=fe89095ccb34bcdc9838a71bc1fa48279ea3ec8c'/>
<id>urn:sha1:fe89095ccb34bcdc9838a71bc1fa48279ea3ec8c</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Fold revision metadata into a two-line row</title>
<updated>2026-08-14T15:02:30Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-08-14T15:02:30Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=f93969e772a36b54998496092b54972825a07dd8'/>
<id>urn:sha1:f93969e772a36b54998496092b54972825a07dd8</id>
<content type='text'>
Title on the first line, date, revision and editor on the second, with the
two actions as an icon grid. Four columns become two, so the table needs no
mobile card treatment.
</content>
</entry>
<entry>
<title>Select revisions to compare by picking rows</title>
<updated>2026-08-14T13:55:13Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-08-14T13:55:13Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=dcdc892d940adffced3d2bc272d813a47c7d4700'/>
<id>urn:sha1:dcdc892d940adffced3d2bc272d813a47c7d4700</id>
<content type='text'>
Two hidden fields hold the pair, picking a row pushes it as the target and
the previous target becomes the source, so any pair takes two picks. Source
and target carry the diff view's own colours, in the rows and in the sticky
bar's readout.

Rows are focusable and respond to Enter and Space, the readout is the
accessible equivalent of the colour, so it is aria-live.
</content>
</entry>
<entry>
<title>Escape feed content with Builder rather than by hand</title>
<updated>2026-08-09T21:31:35Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-08-09T21:31:35Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=5690cf4d4e05eafdfd2e270bbdf1a925114d0f76'/>
<id>urn:sha1:5690cf4d4e05eafdfd2e270bbdf1a925114d0f76</id>
<content type='text'>
Builder escapes by default; the three feed templates no longer call
CGI.escapeHTML. This fixes two sites that never escaped at all: the tag
feed's externally supplied :tag segment, interpolated into its title, self
link and id, and dc:creator in the RDF template.

Subscribers see one difference: quotes and apostrophes arrive raw, which is
valid in element text.

config/initializers/xmlparser.rb, which redefined Builder::XmlBase#_escape
as the identity function, is gone. XML::Node#replace_with went with it, no
callers.
</content>
</entry>
</feed>
