Frontmatter
| id | 8063 |
| title | Refactor LivePreview to use Pluggable Renderers |
| state | Closed |
| labels | enhancementairefactoringarchitecture |
| assignees | tobiu |
| createdAt | Dec 9, 2025, 1:25 AM |
| updatedAt | Dec 9, 2025, 2:26 AM |
| githubUrl | https://github.com/neomjs/neo/issues/8063 |
| author | tobiu |
| commentsCount | 1 |
| parentIssue | null |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| blockedBy | [] |
| blocking | [] |
| closedAt | Dec 9, 2025, 2:26 AM |
Refactor LivePreview to use Pluggable Renderers
tobiu assigned to @tobiu on Dec 9, 2025, 1:49 AM

tobiu
Dec 9, 2025, 1:53 AM
Input from Gemini:
✦ Refactoring complete.
Changes:
Pluggable Renderer Architecture:
- Created
src/code/renderer/Base.mjs(Abstract Base).- Created
src/code/renderer/Neo.mjs(Neo.mjs code execution).- Created
src/code/renderer/Markdown.mjs(Markdown parsing/rendering).
Neo.code.LivePreviewUpdate:
- Now uses
language_('neomjs' | 'markdown') andrenderer_configs.- Dynamic import of renderers.
- Delegates execution to the active renderer.
Portal.view.learn.ContentComponentUpdate:
- Refactored to use
Neo.code.renderer.Markdown, eliminating code duplication.Path Resolution Fix:
- Adjusted relative path resolution in
Neo.mjsrenderer fordevelopmentenvironment to account for the new file location.Verified by user in devmode (standalone and learning section).
tobiu closed this issue on Dec 9, 2025, 2:26 AM
Extract code rendering logic from
Neo.code.LivePreviewand markdown logic fromPortal.view.learn.ContentComponentinto dedicated renderer classes.Goal: Enable
Neo.code.LivePreviewto support multiple languages (Neo.mjs code execution, Markdown rendering) via a pluggable renderer system.Changes:
src/code/renderer/Base.mjs: Abstract base class for renderers.src/code/renderer/Neo.mjs: Encapsulates logic fordoRunSource,findClassNames, etc.src/code/renderer/Markdown.mjs: Encapsulates logic formarkedparsing,HighlightJSprocessing, and custom block extraction.Neo.code.LivePreview:languageconfig (enum: 'neomjs', 'markdown').rendererreactive config (instance of renderer).afterSetLanguageto dynamically import and instantiate the correct renderer.Portal.view.learn.ContentComponent:src/code/renderer/Markdown.mjsto parse content, removing duplication.