{"id":"68fe9836d85440d4c403edac","title":"2025 10 12","path":"how-to/committee/release-notes/2025-10-12","contentMarkdown":"# 12th October 2024 — Page content navigator and enhanced migration UI with fragment support [#66](https://github.com/nbarrett/ngx-ramblers/issues/66)\n## [Build #333](https://github.com/nbarlett/ngx-ramblers/actions/runs/18823789797)\n\n## Page content navigator and enhanced migration UI (refs [#66](https://github.com/nbarrett/ngx-ramblers/issues/66)) ([7b9b78c](https://github.com/nbarrett/ngx-ramblers/commit/7b9b78c))\n\n**What's New**\n\nMajor overhaul of content migration and management with the new Page Content Navigator (replacing the duplicate page manager), comprehensive migration engine improvements, enhanced fragment support with nested rows, and advanced site editing capabilities including drag-and-drop with auto-scrolling.\n\n**Where to Find It**\n\n- **Admin → Page Content Navigator**: New unified interface for browsing all content or resolving duplicates, with URL persistence (`?view-mode=all&search=fragments`)\n- **Admin → Migration Settings**: Enhanced UI with nested row configuration, action buttons in presentation mode, and \"Add Step Here\" inline insertion\n- **Site Edit Mode**: Mini delete buttons, column movement actions, stabilized drag preview, auto-scroll during drag operations\n- **Fragment Management**: Centralised FragmentService with recursive loading, reusable row type selector, and nested fragment support at any depth\n\n**Benefits**\n\n- **Unified Content Management**: Single interface to browse all pages or find duplicates, with bookmarkable searches\n- **Bulk Operations**: Delete multiple pages, change paths with typeahead, preview content on demand\n- **Overhauled Migration Engine**:\n  - Robust DOM sanitisation removes presentational tags, event handlers, HTML comments\n  - Markdown fallback filters inline CSS, attribute-lists, event handlers\n  - Image pattern matching in nested rows (FIRST_IMAGE, FILENAME_PATTERN with globs like \"map|route\", ALT_TEXT_PATTERN)\n  - Caption grouping for short text near images with ATX/Setext heading recognition\n  - Walking Route Layout preset with structured rows, route maps, two-column layouts\n  - ADD_MIGRATION_NOTE step with customizable prefix and date format\n- **Migration History**: Persistent tracking in database with progress/error/summary, UI selector for viewing past migrations\n- **Alt Text Fallback**: Humanised filenames (underscores/dashes → spaces) when alt text missing\n- **Enhanced Nested Rows**:\n  - All PageContentType supported (TEXT/ACTION_BUTTONS/CAROUSEL/ALBUM_INDEX/ALBUM/EVENTS/AREA_MAP/SHARED_FRAGMENT)\n  - Image controls with multi-pattern inputs (filename/alt patterns)\n  - Fragment fields at any depth with searchable ng-select dropdown\n- **Better Site Editing**:\n  - \"Add Step Here\" per step for inline insertion\n  - \"Move Column to first empty row\" creates new rows as needed\n  - Auto-scroll viewport during drag near edges\n  - Stabilised drag preview with correct effectAllowed\n- **Improved Testing**: Comprehensive tests for text exclusions, transformations, multi-pattern matching, Eden/Darent fixtures\n- **Documentation**: New server/lib/migration/README.md and PAGE_TRANSFORMATION_GUIDE.md\n\n## Fragment fixes (refs [#66](https://github.com/nbarrett/ngx-ramblers/issues/66)) ([30b0576](https://github.com/nbarrett/ngx-ramblers/commit/30b0576))\n\n**What's New**\n\nFragment path handling improvements including both 'fragments/..' and '/fragments/..' in lists, absolute link rendering, normalised path comparison, and better usage detection.\n\n**Where to Find It**\n\n- **Fragment Index**: Shows both fragment path variants with absolute links\n- **Usage Detection**: Finds fragment usages by path and pageContentId across nested rows\n\n**Benefits**\n\n- **Complete Fragment Lists**: Both relative and absolute fragment paths displayed\n- **Normalised Paths**: Leading slashes stripped for consistent comparison\n- **Better Usage Tracking**: Detects shared fragment usages across nested rows and id/path variants\n- **Absolute Links**: Fragment and usage paths render as absolute links for easier navigation\n","contentHtml":"<h1>12th October 2024 — Page content navigator and enhanced migration UI with fragment support <a href=\"https://github.com/nbarrett/ngx-ramblers/issues/66\">#66</a></h1>\n<h2><a href=\"https://github.com/nbarlett/ngx-ramblers/actions/runs/18823789797\">Build #333</a></h2>\n<h2>Page content navigator and enhanced migration UI (refs <a href=\"https://github.com/nbarrett/ngx-ramblers/issues/66\">#66</a>) (<a href=\"https://github.com/nbarrett/ngx-ramblers/commit/7b9b78c\">7b9b78c</a>)</h2>\n<p><strong>What&#39;s New</strong></p>\n<p>Major overhaul of content migration and management with the new Page Content Navigator (replacing the duplicate page manager), comprehensive migration engine improvements, enhanced fragment support with nested rows, and advanced site editing capabilities including drag-and-drop with auto-scrolling.</p>\n<p><strong>Where to Find It</strong></p>\n<ul>\n<li><strong>Admin → Page Content Navigator</strong>: New unified interface for browsing all content or resolving duplicates, with URL persistence (<code>?view-mode=all&amp;search=fragments</code>)</li>\n<li><strong>Admin → Migration Settings</strong>: Enhanced UI with nested row configuration, action buttons in presentation mode, and &quot;Add Step Here&quot; inline insertion</li>\n<li><strong>Site Edit Mode</strong>: Mini delete buttons, column movement actions, stabilized drag preview, auto-scroll during drag operations</li>\n<li><strong>Fragment Management</strong>: Centralised FragmentService with recursive loading, reusable row type selector, and nested fragment support at any depth</li>\n</ul>\n<p><strong>Benefits</strong></p>\n<ul>\n<li><strong>Unified Content Management</strong>: Single interface to browse all pages or find duplicates, with bookmarkable searches</li>\n<li><strong>Bulk Operations</strong>: Delete multiple pages, change paths with typeahead, preview content on demand</li>\n<li><strong>Overhauled Migration Engine</strong>:<ul>\n<li>Robust DOM sanitisation removes presentational tags, event handlers, HTML comments</li>\n<li>Markdown fallback filters inline CSS, attribute-lists, event handlers</li>\n<li>Image pattern matching in nested rows (FIRST_IMAGE, FILENAME_PATTERN with globs like &quot;map|route&quot;, ALT_TEXT_PATTERN)</li>\n<li>Caption grouping for short text near images with ATX/Setext heading recognition</li>\n<li>Walking Route Layout preset with structured rows, route maps, two-column layouts</li>\n<li>ADD_MIGRATION_NOTE step with customizable prefix and date format</li>\n</ul>\n</li>\n<li><strong>Migration History</strong>: Persistent tracking in database with progress/error/summary, UI selector for viewing past migrations</li>\n<li><strong>Alt Text Fallback</strong>: Humanised filenames (underscores/dashes → spaces) when alt text missing</li>\n<li><strong>Enhanced Nested Rows</strong>:<ul>\n<li>All PageContentType supported (TEXT/ACTION_BUTTONS/CAROUSEL/ALBUM_INDEX/ALBUM/EVENTS/AREA_MAP/SHARED_FRAGMENT)</li>\n<li>Image controls with multi-pattern inputs (filename/alt patterns)</li>\n<li>Fragment fields at any depth with searchable ng-select dropdown</li>\n</ul>\n</li>\n<li><strong>Better Site Editing</strong>:<ul>\n<li>&quot;Add Step Here&quot; per step for inline insertion</li>\n<li>&quot;Move Column to first empty row&quot; creates new rows as needed</li>\n<li>Auto-scroll viewport during drag near edges</li>\n<li>Stabilised drag preview with correct effectAllowed</li>\n</ul>\n</li>\n<li><strong>Improved Testing</strong>: Comprehensive tests for text exclusions, transformations, multi-pattern matching, Eden/Darent fixtures</li>\n<li><strong>Documentation</strong>: New server/lib/migration/README.md and PAGE_TRANSFORMATION_GUIDE.md</li>\n</ul>\n<h2>Fragment fixes (refs <a href=\"https://github.com/nbarrett/ngx-ramblers/issues/66\">#66</a>) (<a href=\"https://github.com/nbarrett/ngx-ramblers/commit/30b0576\">30b0576</a>)</h2>\n<p><strong>What&#39;s New</strong></p>\n<p>Fragment path handling improvements including both &#39;fragments/..&#39; and &#39;/fragments/..&#39; in lists, absolute link rendering, normalised path comparison, and better usage detection.</p>\n<p><strong>Where to Find It</strong></p>\n<ul>\n<li><strong>Fragment Index</strong>: Shows both fragment path variants with absolute links</li>\n<li><strong>Usage Detection</strong>: Finds fragment usages by path and pageContentId across nested rows</li>\n</ul>\n<p><strong>Benefits</strong></p>\n<ul>\n<li><strong>Complete Fragment Lists</strong>: Both relative and absolute fragment paths displayed</li>\n<li><strong>Normalised Paths</strong>: Leading slashes stripped for consistent comparison</li>\n<li><strong>Better Usage Tracking</strong>: Detects shared fragment usages across nested rows and id/path variants</li>\n<li><strong>Absolute Links</strong>: Fragment and usage paths render as absolute links for easier navigation</li>\n</ul>\n"}