| Age | Commit message (Collapse) | Author |
|
revert! discards exactly the topmost non-empty layer -- autosave if
present, else draft -- and reveals whatever's beneath it, releasing the
lock only once nothing is left to protect. Guards against destroying a
brand-new, never-published node's only draft, which would violate the
(head | draft) invariant every other method here assumes holds; the
view's Destroy/Discard button is gated the same way.
nodes#edit now calls lock_for_editing! instead of find_or_create_draft,
and always displays autosave || draft || head, resurrecting an
abandoned session's unsaved content by default with an explicit flash
explaining what's shown and how to get back to the last saved version.
The view drops content_for :subnavigation entirely: Show becomes
"Unlock + Back", Preview stays a plain link, metadata's own <details>
already replaced the old toggle, and Publish moves off this page for
good, per the earlier decision to manage the publish lifecycle
entirely from nodes#show. Save Draft and Save + Unlock + Exit appear
both above and below the form, given the body field alone runs 600px
on desktop.
|
|
|
|
Lets editors share a draft with people outside the admin system, via a
random per-page token rather than an enumerable id - /preview/<token>.
shared_previews#show is intentionally unauthenticated. Redirects to the
real public URL once the page is published. Surfaced on nodes#show
(Admin Preview + Public Preview, next to Public Link) as generate/revoke
buttons.
|
|
Adding the occurrences.event_id FK constraint broke fixture loading
entirely (every test failing at setup) with a misleading "Foreign key
violations found in your fixture data" error. The real cause: this
Rails feature does its own proactive integrity check during fixture
insertion, independent of the constraint's own deferrability, by
directly flipping pg_constraint.convalidated and re-validating - which
needs catalog-level privilege the app's DB role correctly doesn't have.
No actual fixture data was ever invalid; the check itself couldn't run.
Scoped to test.rb only - this never affected real application behavior,
and Postgres still fully enforces the actual constraint everywhere,
in every environment, regardless of this setting.
|
|
nodes#new: each kind's radio button now shows a label plus a smaller,
muted .field_hint explaining what happens automatically (parent,
tags, template) - previously a single undifferentiated string mixing
a short label with a long parenthetical, cluttering the smaller kinds
(erfa/chaostreff) worst. Title field gets the same hint treatment,
telling editors up front that the slug is auto-generated and where to
adjust it later - the previous silence here meant editors only
discovered slug generation after already committing to a title, with
no visible way to fix it.
New "Resulting path" row live-previews the full URL (origin + kind's
path prefix + a debounced call to the new parameterize_preview route,
reusing the exact same slug_for helper "create" now calls, so the
preview can never diverge from what actually gets created) as the
editor types, plus a copy-to-clipboard button. For "generic", the
prefix comes from whichever parent gets chosen via the search widget,
not the registry - parent_search.link_closure now stashes the chosen
node's unique_name as a data attribute for exactly this.
New read-only admin/conventions view dumps the NODE_KINDS registry as
a reference table for whoever's confused later about how a given kind
behaves - deliberately just renders the same label/hint text used on
nodes#new rather than re-describing parent/tags/template separately,
since decomposing the parent Proc would mean either invoking it
(Update's has a real side effect - creates the year folder) or
re-stating its logic a second time in a different shape, either of
which risks drifting from the actual behavior.
nodes#edit's Template field gets a one-line hint noting the value may
already be pre-filled based on how the node was created - the one
place the previous commit's new inheritance mechanism actually
surfaces on this view.
|
|
lib/ccc_conventions.rb: NODE_KINDS registry replaces the kind-specific
branches previously scattered across nodes_controller#create (tags),
unique_path-position check). Each kind declares its parent lookup
(a Proc - Update's "update"/"press_release" continue to genuinely
find-or-create their year-folder via Update.find_or_create_parent;
erfa/chaostreff use a plain find_by_unique_name!, since their parent
nodes are fixed and a missing one should fail loudly, not be silently
created), its tags, and (new) its default template.
Node gains a default_template_name column (migration, with backfill
for existing update-tree nodes via node.update? - reusing that method
rather than re-deriving its unique_path check in raw SQL). Page#set_template
now inherits from node.default_template_name, falling back to the old
update?-based check only when the column is blank, and only fills in
template_name when nothing's already been explicitly chosen - a
deliberate change from the previous behavior, which unconditionally
overwrote template_name on every save regardless of manual selection.
Node#update? itself is unchanged and still used as-is by
admin_controller's sitemap filtering - a genuinely different, still
valid use of that check.
"generic" stays special-cased in the controller, parametrized by
params[:parent_id] at request time - doesn't fit "kind implies a fixed
lookup" and isn't in the registry.
nodes#new's four hardcoded radio buttons and nodes_controller's
kind-specific case/when branches are both replaced by iterating/looking
up this one registry - adding a new kind now means one new hash entry,
not four scattered edits.
|
|
|
|
- open_erfas_today helper: samples 3 random open-day-tagged occurrences
of the current day; widget hidden entirely on days without open
chapters; heading shows current weekday
- content/_open_erfas_today partial rendered in right column above
tags and featured articles
- _chapter partial: open-day schedules (event_schedule_text) shown
inline in aggregated chapter lists with 'Offene Tage' label
- ccc.css: open_erfas_today added to existing right-column widget
selector groups (headings, lists, links)
|
|
- Event: acts_as_taggable_on :tags — uses existing polymorphic
taggings table, no migration needed
- events/edit and events/new: tag_list field added, tag_list
permitted in events_controller strong params
- locales: add open_days (Offene Tage / Open days),
upcoming_events (Weitere Termine / Upcoming events),
event_schedule_time, event_schedule_unrecognized,
event_schedule_none keys
|
|
- 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
|
|
|
|
- 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 -> GET, missing = on form_tag), jQuery
.attr("value") -> .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.
|
|
- 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/)
|
|
- aggregate: switch to shortcode syntax [aggregate ...]; fix paragraph
wrapping by excising the shortcode and its surrounding <p> 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)
|
|
|
|
- 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 ~> 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 ~> 8.0 added explicitly (previously indirect dependency)
- awesome_nested_set, acts-as-taggable-on pinned to git main/master
(gemspec activerecord < 8.1 ceiling; no functional incompatibility;
repin to version once upstream releases updated gemspecs)
- globalize ~> 7.0, libxml-ruby ~> 5.0, nokogiri ~> 1.18, pg ~> 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 <button> not <input>)
- 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
|
|
|
|
|
|
- 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
|
|
- Remove safe_path helper and content_path shim from link_helper.rb
- Update all safe_path call sites in views to use named route helpers directly
- Fix Globalize fallbacks via config.i18n.fallbacks in application.rb, remove i18n initializer
- Stub Node.search returning none (search disabled pending PostgreSQL upgrade)
- Replace to_s(:db) with to_fs(:db) in node.rb, nodes_helper.rb, link_helper.rb, admin view
- Move LockedByAnotherUser to app/models/locked_by_another_user.rb for Zeitwerk autoloading
- Fix config/environments/test.rb: config.assets removed, cache_classes → enable_reloading,
test_order removed, minitest pinned to ~> 5.25
- Fix config/environments/development.rb: cache_classes → enable_reloading
- Park search vector migration in doc/ pending PostgreSQL and plpgsql availability
|
|
- Bump Rails to 7.2.3, Ruby to 3.2.11 (new gemset rails7-upgrade)
- pg pinned to 1.4.6 (bridge: Ruby 3.2 compatible, PostgreSQL 9.6 tolerant)
- acts-as-taggable-on → 12.x (Rails 7.2 + Ruby 3.2 support)
- awesome_nested_set → 3.7.0 (Rails 7.2 support, avoids 3.9.0 lft/rgt bug)
- globalize → 7.0 (Rails 7.x required)
- libxml-ruby → 5.x (Ruby 3.2 required)
- unicorn → 6.x; fix unicorn.rb: RAILS_ROOT→Rails.root, RAILS_ENV→ENV,
File.exists?→File.exist?
- Add puma for development server
- Remove dead initializers: assets.rb, ruby2.rb, backtrace_silencers.rb,
new_rails_defaults.rb
- Fix File.exists? → File.exist? in page.rb and authors_importer.rb
- Add routing_filter_rails71_patch.rb (restores params[:locale] on Rails 7.1+)
|
|
- routing-filter 0.6.3 -> 0.7.0 (Rails 6.1 compatibility)
- RSS named routes rss_xml/rss_rdf added
- RouteWithParams workarounds: will_paginate_patch, content_path shim, safe_path helper
- Paperclip removed, replaced with FileAttachment concern (preserves URL scheme)
- Assets resource moved to /admin/assets (Sprockets middleware conflict)
- ApplicationRecord base class added, all models migrated
- Strong parameters added to Assets, Occurrences, Events, MenuItems controllers
- update_attributes -> update throughout
- render :nothing -> head :ok/:not_found throughout
- language_selector rewritten (removes :overwrite_params)
- Environment files updated for Rails 6.1 (eager_load, public_file_server, ActionMailer)
- Arel::Visitors::DepthFirst and Integer/Float duration patches removed from test_helper
- AssetsController tests added (10 tests covering upload, variants, destroy, auth)
- ImageMagick geometry: 460x250! for headline crop (not # which is invalid in IM6)
129 runs, 311 assertions, 5 failures (all pre-existing), 0 errors
|
|
- Bump rails 4.2.11.3 → 5.2.8.1, ruby 2.4.10 → 2.5.8
- Upgrade acts-as-taggable-on ~> 3.5 → ~> 6.0
- Upgrade exception_notification ~> 4.4 → ~> 4.5
- Upgrade globalize ~> 5.0 → ~> 5.2.0
- Upgrade pg ~> 0.17 → ~> 1.0
- Upgrade sass-rails ~> 4.0 → ~> 5.0
- Upgrade libxml-ruby to ~> 3.2 (5.x requires Ruby 3.2+)
- Pin awesome_nested_set ~> 3.4.0 (3.9 has lft/rgt update bug)
- Add rails-controller-testing gem
- Add assets initializer for jquery precompile
- Add acts_as_taggable missing indexes migration
- Set eager_load, serve_static_files, active_record settings
|
|
- Bump rails 3.2.22.5 → 4.2.11.3
- Replace globalize3 with globalize ~> 5.0 (gem renamed at 5.0)
- Upgrade routing-filter ~> 0.3 → ~> 0.6
- Upgrade sass-rails, coffee-rails to 4.x
- Upgrade awesome_nested_set 2.x → 3.x (Rails 4 required)
- Add jquery-rails for UJS support
- Pin nokogiri ~> 1.10.10, loofah ~> 2.20.0, rails-html-sanitizer ~> 1.4.4
- Add config/secrets.yml (gitignored), eager_load, serve_static_files
- Fix routes: add via: to all match calls, remove legacy catch-all routes
- Add admin named route, fix rvm dotfiles
- Fix ActiveRecord::FixtureSet rename in test_helper
- Set active_support.test_order and active_record.raise_in_transactional_callbacks
|
|
- Bump acts-as-taggable-on from 2.4.1 to 3.5.0
- Fake engine migrations for pre-existing schema
- Set serve_static_assets in development
- Fix request.fullpath in authenticated_system (request_uri removed in Rails 3.x)
- Fix Paperclip path format to match existing file layout
|
|
- Converted plugins to gems (Gemfile)
- Updated config structure (application.rb, boot.rb, environment.rb)
- Converted routes to Rails 3 DSL
- Converted named_scope to scope throughout models
- Converted find(:all, :conditions) to where() chains
- Fixed has_many :order to use ordering scope
- Updated session store and secret token configuration
- Fixed exception_notification middleware configuration
- Patched Ruby 2.4 / Rails 3.2 incompatibilities:
- Integer/Float duration arithmetic (ActiveSupport)
- Arel visit_Integer for PostgreSQL adapter
- create_database String/Integer coercion
- ActionController consider_all_requests_local
- Migrated taggings schema for acts-as-taggable-on
- Replaced dynamic_form gem with custom form_error_messages helper
- Fixed Rails 3 block helper syntax (form_for, form_tag, fields_for)
- Fixed admin layout yield
- Updated test suite for Rails 3 APIs
|
|
|
|
|
|
|
|
|
|
also tuned dependencies
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
easier to generate proper public paths and urls.
|
|
I still want to avoid thos "more / mehr" links
|
|
|
|
|
|
added section to environment.rb listing the whitelisted tags and attributes and examples on how to extend the list
|
|
great
|
|
|
|
|
|
|
|
also changing the german error messages to english as the interface is english only so far
|
|
|
|
|