Skip to content

feat: add YAML layout system with CSS Grid renderer#57

Merged
peterbaumert merged 5 commits into
mainfrom
feature/layout-yaml-renderer
Apr 7, 2026
Merged

feat: add YAML layout system with CSS Grid renderer#57
peterbaumert merged 5 commits into
mainfrom
feature/layout-yaml-renderer

Conversation

@peterbaumert
Copy link
Copy Markdown
Owner

Summary

  • Introduces a YAML-based layout system as a simpler, structured alternative to hand-writing raw CSS grid-template-areas
  • New CSS Grid renderer powered by YAML layout definitions
  • 10 Cisco device YAML examples (C2960X, C9300, FPR1120, and more) to serve as templates
  • Full YAML layout schema reference in docs/yaml-layout-schema.md
  • css_to_yaml management command to help migrate existing CSS-based layouts to YAML

Details

  • YAML layouts support pattern: all, pattern: sequence (with top-odd/top-even), and explicit port/row definitions
  • row: field added to sequence schema for multi-row layouts
  • Parser, renderer, and 10+ new tests included
  • css_to_yaml command reads existing DeviceView CSS and outputs an equivalent YAML skeleton

Notes

Important

After upgrading, run python manage.py css_to_yaml to generate YAML equivalents for your existing CSS layouts. The CSS renderer continues to work unchanged.

Peter Baumert added 5 commits April 5, 2026 02:46
- Add yaml_layout TextField and has_yaml_layout property to DeviceView model
- Add migration 0003_deviceview_yaml_layout
- Implement layout module: NormalizedLayout model, YAML parser, CSS Grid
  renderer, legacy CSS adapter, and public API (parse_yaml, render_css,
  validate_yaml, get_css_for_device_view)
- Update prepare() in utils.py to route through get_css_for_device_view()
  so YAML layouts are preferred over legacy CSS when present
- Expose yaml_layout in forms and API serializer
- 43 tests for YAML parser covering sequences, groups, variants, copy_from
- 18 tests for CSS Grid renderer covering grid construction and output format
- Updated 4 mock objects in test_utils.py to include has_yaml_layout=False
Converts Cisco (C9300-24T, C2960X-24TD-L, C8300-2N2S-4T2X, FPR1120),
Generic patch panels (24/48-port UTP, 24xLC, SC-24, LC-48), and
Ubiquiti USW-Enterprise-24-PoE to the new YAML layout format
- docs/yaml-layout-schema.md: full schema reference covering version, meta,
  canvas, views, elements, sequences, groups, spacers, blanks, copy_from,
  extend_view, and variants with annotated examples
- README.md: replace CSS-only How It Works section with dual YAML/CSS
  format documentation
- devcontainer entrypoint: remove failing pre-commit steps
@peterbaumert peterbaumert merged commit 5d68d77 into main Apr 7, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant