summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
8 daysRemove a stale bundler pinerdgeist
8 daysAdd banner partialserdgeist
9 daysAdd banner render logicerdgeist
9 daysAdd banner convention to conventions file and init.rakeerdgeist
9 daysAdd tests for the redirect mechanicserdgeist
9 daysSurface redirects in nodes#show, the action log and when publishingerdgeist
9 daysForce a blank redirect status to nilerdgeist
9 daysAlso redirect on restricted pageserdgeist
9 daysAdd migration for redirects flag and targeterdgeist
9 daysAdd redirect ui in in nodes#edit and apply some minor cleanuperdgeist
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.
10 daysRedirect a page to a node or an external URLerdgeist
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.
12 daysWrap localStorage access in try/catcherdgeist
13 daysToggle the search widget from a buttonerdgeist
13 daysBridge Rails values into JavaScript through a JSON elementerdgeist
13 daysImport Markdown into the editorerdgeist
Use a vendored marked to import Markdown documents into tinymce.
13 daysStrengthen the hairline in dark modeerdgeist
13 daysGive the pre-authentication pages one carderdgeist
.auth_card nowcarries the login form and the second-factor challenge.
2026-08-15Style totp input fields so that they work better on mobileerdgeist
2026-08-15Name the radius scaleerdgeist
Four steps: controls, images, cards, pills.
2026-08-15Add test for trashed rows offering restore and refusing restore without live parentserdgeist
2026-08-15Restore from and redesign the trash listerdgeist
2026-08-15Space the create-action groupserdgeist
2026-08-14Retire conventions overview pageerdgeist
2026-08-14Fold revision metadata into a two-line rowerdgeist
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.
2026-08-14Move the revision picker into admin_interface.jserdgeist
2026-08-14Select revisions to compare by picking rowserdgeist
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.
2026-08-14Use accent as text in the flash, and a soft fill for standing markerserdgeist
2026-08-14Visually touch up the login carderdgeist
2026-08-14Check rendered markup for balance in controller testserdgeist
Every successful HTML response is parsed, as a document or a fragment depending on whether it carries a doctype, and parse errors fail the test. New actions inherit the check.
2026-08-14Bring menu_items#new up to the current markuperdgeist
The page now uses .admin_layout, so its fields get the shared treatment.xi The title fields carry .menu_field for the 44rem cap, which survives a third locale where an id list would not.
2026-08-14Scope admin form conventions with a classerdgeist
.admin_layout replaces the #admin_layout. All css rules and javascript queries were changed along and rules simplified where the opportunity arose.
2026-08-14Consolidate .action_button styling from visual nudgingerdgeist
Let containers space their own action buttons: Remove a superfluous margin-bottom from .action_button, their containers already properly arranged them. Align action rows on the text baseline: .aligned_action_row aligns its children on the baseline, so a control sits level with the text beside it without a per-element offset.
2026-08-13Name the desktop label banderdgeist
Convert the gutter, the label column and the gap from four literals in three rules two named variables.
2026-08-13Give every admin page one horizontal guttererdgeist
by many views inside. The inner ones are gone nodes#edit's becomes #body_field, which is what #edit_grid places in its full-width row. Rows now reach into the label band themselves rather than depending on a page wrapper to do it. The label column plus its gap equals the escape, so a row's content starts at the gutter on every page; #edit_grid's rows are exempt because the grid already steps back. share one left edge. #new_node's -118px was compensating for that 10px and left the page 7px out once it went. standalone_action_bar was overridden everywhere it appeared. page_translations#edit no longer uses #edit_grid: it has no metadata column, so the two-column template pushed its abstract into the empty half. nodes#edit's lower action bar was inside #edit_grid, so it was a grid item inheriting the escape and sat 125px left of the form above it.
2026-08-12Push font size for node_action_time/date to --text-smerdgeist
2026-08-12Introduce a type scale and apply to the font-size ruleserdgeist
2026-08-12Remove unused classes and consolidate css ruleserdgeist
2026-08-12Give the admin lists a shared table and row vocabularyerdgeist
row_primary and row_secondary replace four names for a row's title and five for its supporting line, across the tables and the sitemap. Actions cells no longer sit flush against the row edge Header rows move into thead, which retires the .header class from the CSS, the tr.header:hover suppression, and .no_hover Replace variety of nodes_table, assets_table, events_table, revisions_table, user_table and sitemap with a shared class admin_table
2026-08-11Cleanup redundant rules in public csserdgeist
2026-08-11Fix admin.css button states and table paddingerdgeist
2026-08-10Fix three admin.css defectserdgeist
.action_button's font: inherit reset the font-weight: bold above it and the line-height: 1.2 in the other .action_button rule; font-family and font-size were what it was for. Buttons render bold again and at the intended height. .link_icon_button:hover painted --on-solid, a fixed white, onto a fill of --text -- an invisible glyph. --surface is what every other hover onto --text uses. Icon tiles in action_item carry the border and the disabled variant is the one without. The raised fill is 3% off the background where the border is 13%, so the border was carrying the distinction while the disabled state was the only thing outlined.
2026-08-09Remove two dead rake task fileserdgeist
cccms:mysql_to_postgres was the one-time MySQL to PostgreSQL import. It uses set_table_name and globalize_translations, removed from Rails and Globalize respectively, so it raises on its first class definition. ci:run_ci configured Integrity, a CI server this project no longer uses. It copies config/database.sqlite3-sample.yml, which does not exist, over config/database.yml, which is a live local file.
2026-08-09Document loading the schema as the install patherdgeist
db/schema.rb is in the repository, so a fresh install loads it rather than replaying migrations. db:setup and db:reset are safe; db:migrate is for an existing installation. The search_vector trigger is reinstalled by a db:schema:load hook and at boot, so a fresh install needs nothing further. A restore from a dump that predates the trigger needs pages:backfill_search_vector, now listed under one-shot tasks. The test database is no longer created by hand: Rails' db:test:prepare drops and recreates it from database.yml.
2026-08-09Escape feed content with Builder rather than by handerdgeist
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.
2026-08-09Let the RSS templates raise in testserdgeist
2026-08-09Add a task to populate missing search vectorserdgeist
2026-08-09Remove the Rails 3.2 duration patcherdgeist
It reopened Integer and Float to work around duration arithmetic under Ruby 2.4 and Rails 3.2, and has been shadowing ActiveSupport's own helpers ever since. Its months were exactly 30 days and its years 365.25, both differing from ActiveSupport's constants, and it built Duration parts as an array of pairs rather than a hash, recording weeks as days and hours and minutes as seconds
2026-08-09Remove the Rails 3.2 create_database patcherdgeist
It rewrote the method to work around Enumerable#sum refusing a String seed under Ruby 2.4, and has been obsolete since Rails 3.2 was left behind. It kept shadowing the adapter, dropping the collation, ctype, locale and locale_provider options Rails 8 supports
2026-08-09Load the test schema through Rails, and keep the search trigger installederdgeist
2026-08-09Cleanup gitignoreerdgeist