<feed xmlns='http://www.w3.org/2005/Atom'>
<title>cccms/config, branch erdgeist-revive-events</title>
<subtitle>[no description]</subtitle>
<id>https://erdgeist.org/gitweb/cccms/atom?h=erdgeist-revive-events</id>
<link rel='self' href='https://erdgeist.org/gitweb/cccms/atom?h=erdgeist-revive-events'/>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/cccms/'/>
<updated>2026-06-30T22:24:10Z</updated>
<entry>
<title>Add RRULE humanizer and wire events into nodes#show</title>
<updated>2026-06-30T22:24:10Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-06-30T22:24:10Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/cccms/commit/?id=95955abaa339098755a214cfcadf87c90211fe64'/>
<id>urn:sha1:95955abaa339098755a214cfcadf87c90211fe64</id>
<content type='text'>
- app/models/concerns/rrule_humanizer.rb: new concern included into
  Event, renders recurring schedule as natural-language German or
  English from RRULE string; handles WEEKLY/MONTHLY, biweekly
  (INTERVAL=2), ordinal weekday positions (1TU, -1TH, -2WE),
  BYMONTH single-month exclusions (December pause convention);
  gracefully returns nil for COUNT/UNTIL/unrecognized shapes
- test/models/concerns/rrule_humanizer_test.rb: 15 tests covering
  all distinct RRULE shapes found in production data
- app/helpers/nodes_helper.rb: add event_schedule_text helper
  combining humanize_rrule with start_time formatting
- app/views/nodes/show.html.erb: add events row, conditionally
  rendered when node has associated events
- config/locales/de.yml, en.yml: add event_schedule_time,
  event_schedule_unrecognized, event_schedule_none keys
</content>
</entry>
<entry>
<title>Remove recent_changes RSS feed.  It leaks unpublished drafts and the basic auth was only symbolic</title>
<updated>2026-06-30T17:21:09Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-06-29T19:32:32Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/cccms/commit/?id=3bb2271850bab577f35291a174b1985aea2b2b55'/>
<id>urn:sha1:3bb2271850bab577f35291a174b1985aea2b2b55</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Restore and improve admin node search</title>
<updated>2026-06-29T02:30:22Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-06-29T02:28:55Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/cccms/commit/?id=191a77b2f7c280e00f7348507c13a173c704fcf9'/>
<id>urn:sha1:191a77b2f7c280e00f7348507c13a173c704fcf9</id>
<content type='text'>
- Admin search broke when routing-filter was removed: hardcoded /admin/search
and /admin/menu_search URLs in admin_search.js no longer matched the
locale-scoped routes. Fix by emitting locale-aware URLs from the layout
as JS variables.

- Also fixes form submission (POST -&gt; GET, missing = on form_tag), jQuery
.attr("value") -&gt; .val() for typeahead input reading, and template name
for Rails 8 compatibility.

- Adds a visible "search" link to the admin menu so editors can discover
the feature without knowing the Alt+F shortcut. Search results now show
node path alongside title and link directly to the edit view.

Named route admin_menu_search added to routes.rb.
</content>
</entry>
<entry>
<title>rss: add per-tag Atom feed at /rss/tags/:tag/updates.xml</title>
<updated>2026-06-27T21:19:22Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-06-27T21:19:22Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/cccms/commit/?id=b94de9fe8c30210469953bbd9880e9cbcc7a3ef5'/>
<id>urn:sha1:b94de9fe8c30210469953bbd9880e9cbcc7a3ef5</id>
<content type='text'>
- rss#tag_updates action: filters Page.heads by tag name, default
  locale, 20 items, same caching as updates feed
- tag_updates.xml.builder: Atom feed with CGI.escapeHTML on title
  and summary, consistent with updates.xml.builder
- tags/show.html.erb: add subscription link above article list
- routes: two routes per existing pattern (format-less + .:format
  constrained to /xml/)
</content>
</entry>
<entry>
<title>Stage 7 click-testing fixes</title>
<updated>2026-06-27T19:14:48Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-06-27T19:14:48Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/cccms/commit/?id=a627a650fda4e22107245a3269465347bb778258'/>
<id>urn:sha1:a627a650fda4e22107245a3269465347bb778258</id>
<content type='text'>
- aggregate: switch to shortcode syntax [aggregate ...]; fix paragraph
  wrapping by excising the shortcode and its surrounding &lt;p&gt; before
  sanitize, concatenating collection output outside sanitized content
- page.rb: remove aggregate XML unwrapping from rewrite_links_in_body
  (no longer needed with shortcode approach)
- rss builders: explicit CGI.escapeHTML on title/abstract; Builder 3.3.0
  does not escape when target buffer is html_safe (ActionView default)
- tinymce: disable menubar and promotion nag; add code plugin, remove
  paste plugin (built into TinyMCE 8 core); configure via admin_interface.js
  directly (config/tinymce.yml affects tinymce() helper only, not tinymce.init)
</content>
</entry>
<entry>
<title>Fix routes after removing the routing-filter</title>
<updated>2026-06-27T18:28:00Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-06-27T18:28:00Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/cccms/commit/?id=4c22631a5a85b3082f0525cc2454d2bd2251922a'/>
<id>urn:sha1:4c22631a5a85b3082f0525cc2454d2bd2251922a</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Stage 7: Rails 7.2 → 8.1 on Ruby 3.2.11</title>
<updated>2026-06-27T14:58:53Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-06-27T14:58:53Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/cccms/commit/?id=420506e58fdfc84f1a5bede0a01dedf0af3bb4f3'/>
<id>urn:sha1:420506e58fdfc84f1a5bede0a01dedf0af3bb4f3</id>
<content type='text'>
- Bump Rails to 8.1.3 (Ruby unchanged at 3.2.11, new gemset rails8-upgrade)
- config.load_defaults 8.1; merge app:update diffs for all environment files
- Remove routing-filter 0.7.0; replace with native scope '(:locale)' in
  routes.rb and default_url_options in ApplicationController
- Delete config/initializers/routing_filter_rails71_patch.rb
- Replace vendored TinyMCE 3.x (~200 files) with tinymce-rails ~&gt; 8.3;
  migrate admin_interface.js from jQuery .tinymce()/advanced theme to
  tinymce.init(); add config/tinymce.yml; note: TinyMCE 7+ is GPL
- rails-i18n ~&gt; 8.0 added explicitly (previously indirect dependency)
- awesome_nested_set, acts-as-taggable-on pinned to git main/master
  (gemspec activerecord &lt; 8.1 ceiling; no functional incompatibility;
  repin to version once upstream releases updated gemspecs)
- globalize ~&gt; 7.0, libxml-ruby ~&gt; 5.0, nokogiri ~&gt; 1.18, pg ~&gt; 1.5
- sass-rails, coffee-rails, uglifier moved from :assets group to main
  (Sprockets 4 convention; :assets group no longer meaningful)
- Node: head, draft, lock_owner marked belongs_to optional: true
- Page: node, user, editor marked belongs_to optional: true
- Static assets in public/images/ and public/javascripts/ referenced via
  plain HTML tags; Rails 8 load_defaults raises on pipeline helpers for
  undeclared assets
- sessions_controller_test.rb: remove stale require and dead rescue_action
- users_controller_test.rb: assert button[type=submit] not input[type=submit]
  (Rails 8 button_to renders &lt;button&gt; not &lt;input&gt;)
- test_helper.rb: node.reload after children.create! (awesome_nested_set
  3.9.0 does not refresh parent in memory after callback)
- 129 runs, 339 assertions, 3 failures, 0 errors — identical baseline to 7.2
</content>
</entry>
<entry>
<title>Add minimal storage.yml to satisfy Active Storage engine in production</title>
<updated>2026-06-26T20:41:52Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-06-26T20:41:52Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/cccms/commit/?id=27729df99a8f1ccfcdcb0bc7dc31d9e816d78555'/>
<id>urn:sha1:27729df99a8f1ccfcdcb0bc7dc31d9e816d78555</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Fix RSS feeds, xmlparser initializer</title>
<updated>2026-06-26T12:22:33Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-06-26T12:22:33Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/cccms/commit/?id=536646a13c008b2ebcee8a4f25e7c011a8eb4a8b'/>
<id>urn:sha1:536646a13c008b2ebcee8a4f25e7c011a8eb4a8b</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Stage 5 click-testing fixes</title>
<updated>2026-06-26T11:40:55Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-06-26T11:40:55Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/cccms/commit/?id=811bb04649365b0faaa00b1e0810bb101a4d19b1'/>
<id>urn:sha1:811bb04649365b0faaa00b1e0810bb101a4d19b1</id>
<content type='text'>
- Fix link_to :method → button_to for all PUT/DELETE actions
- Add button_to CSS reset to admin.css for visual consistency
- Fix admin layout: replace broken jquery/jquery_ujs pipeline refs with
  admin_bundle via sprockets; add sprockets-rails, jquery-ui-rails gems
- Add app/assets/javascripts/admin_bundle.js pipeline manifest
- Fix event_information helper: use safe_join to avoid double-escaping
- Fix nodes_helper: to_s(:db) → to_fs(:db) for event times
- Fix revisions view: eliminate nested forms; diff button uses vanilla JS
  to collect radio button values before POST
- Fix config/environments/development.rb and test.rb: cache_classes →
  enable_reloading
- Add routing_filter_rails71_patch.rb version guard
- Move LockedByAnotherUser to own file for Zeitwerk autoloading
- Fix Globalize fallbacks via config.i18n.fallbacks in application.rb
</content>
</entry>
</feed>
