Files
NetBox-Concept/CHANGELOG.md
T
MrBlakeandClaude Sonnet 5 96ce1ef713 v0.2.4: verify and declare NetBox 4.7.1 compatibility
Went through NetBox 4.7's release notes for breaking/plugin-relevant
changes and checked each one that could plausibly affect this plugin
against the actual v4.7.1 source rather than assuming:

- Rack.form_factor/width/airflow/outer_* are deprecated (removal
  planned for v5.0) but still present and behave the same - the
  plugin's GEOMETRY_FIELDS copying is unaffected.
- ChoiceSet's CHOICES now accepts a new Choice object, but the
  metaclass explicitly still supports the legacy (value, label, color)
  tuple format this plugin's own choices.py uses - confirmed by
  reading utilities/choices.py's updated register() logic directly.
- register_model_view, ViewTab, get_model_urls, PluginConfig's
  relative resource-path resolution, PortTemplateMapping/
  PortMappingBase (patch panel front/rear sync),
  Cable/CableTermination/CabledObjectModel (rack-import cable copy),
  NetBoxModel/NetBoxModelForm/NetBoxModelFilterSet/NetBoxModelViewSet,
  PluginMenu*, ColorField, DynamicModelChoiceField, TagFilterField,
  CSVChoiceField/CSVModelChoiceField: all unchanged or only gained
  additive mixins.
- django-tables2 v3's removed RelatedLinkColumn and the removed
  querystring tag aren't used anywhere in this plugin. The MPTT->ltree
  migration doesn't touch any model this plugin manipulates directly.

No source changes were required. Raised max_version from 4.6.99 to
4.7.99 to reflect the verified range; left it there rather than
guessing forward to an unreleased 4.8.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-17 09:04:58 +02:00

92 lines
5.3 KiB
Markdown

# Changelog
## 0.2.4
- Verified compatibility with NetBox 4.7.1 and raised `max_version` to `4.7.99`
accordingly (was `4.6.99`). Checked every area 4.7's release notes call out as
breaking or plugin-relevant against the actual 4.7.1 source: the `Rack` model's
`form_factor`/`width`/`airflow`/`outer_*` fields (deprecated, not removed),
`ChoiceSet`'s `Choice`-object refactor (the legacy `(value, label, color)` tuple
format this plugin's own choices use is explicitly still supported),
`register_model_view`/`ViewTab`/`get_model_urls`, `PluginConfig` resource-path
resolution, `PortTemplateMapping`/`PortMappingBase` (the patch-panel front/rear
mapping this plugin's component sync reads), `Cable`/`CableTermination`/
`CabledObjectModel` (the rack-import cable copy), and the `NetBoxModel*`/
`PluginMenu*`/`ColorField`/`DynamicModelChoiceField` base classes. No code changes
were needed - django-tables2's `RelatedLinkColumn` removal and the removed
`querystring` tag don't apply (unused), and the MPTT→ltree migration doesn't touch
anything this plugin manipulates directly.
## 0.2.3
- Fix: dragging a device from front to rear (or back) made it invisible mid-drag - it
stayed structurally inside its own source `<svg>`, so it rendered underneath the
other panel once it overlapped it instead of over it. Replaced the in-SVG transform
with a free-floating HTML "ghost" fixed to `<body>` that tracks the pointer; the
original block just dims in place while dragging, exactly like before.
- Fix: the rear elevation only ever showed a device type's `rear_image`, leaving
shallow devices without one (e.g. PDUs) blank on the rear view even when a perfectly
usable `front_image` exists. Full-depth devices are unaffected (their rear view still
only shows their own rear image, or nothing - showing the front picture there would
be wrong); only non-full-depth devices now fall back to the front image on the rear
view.
- Shorten the drag-hint badge text above the elevation (the German translation in
particular had gotten too long for the badge).
## 0.2.2
- Drag-and-drop now supports dragging a device from the front elevation onto the rear
one (and back), reassigning its face. Front and rear share one coordinate system
(same unit height, rack offset, ...), just placed side by side on screen, so the
existing delta-based drag math is already valid for a cross-panel drop - only the
target face needed detecting (via `elementFromPoint` at drop time) and sending along.
Fixed a related bug along the way: without `pointer-events: none` on the dragged
block during the drag, `elementFromPoint` would always hit the dragged block itself
rather than the panel underneath, so the cross-face drop would never have been
detected; pointer capture keeps delivering move/up events to it regardless.
## 0.2.1
- Rework PNG export: instead of rasterizing the SVG export via `<img>`/`<canvas>`
(fragile - any malformed SVG or cross-origin image reference could fail the whole
export with an opaque error), draw the elevation directly onto a `<canvas>` from
plain pixel geometry (`export/data/`), the same approach netbox-topology-views uses.
Device type images are fetched individually as same-origin blobs; a single image
failing to load only drops that picture instead of aborting the export. Added a
combined front+rear PNG option to the Export menu.
## 0.2.0
- Fix: several multi-line `{# ... #}` template comments rendered as literal text on
the page instead of being stripped, because Django's comment-tag regex doesn't match
across newlines. All comments are now single-line. (This was also the most likely
cause of a reported "PNG export failed" error: the leaked text made the exported SVG
invalid, so the browser couldn't decode it as an image.)
- Add German translation (`locale/de/`). English remains the source language and needs
no catalog; both are already listed in NetBox's own language selector.
- Center the "+ Add device" hint on empty rack units instead of right-aligning it.
- Add SVG/PNG/draw.io export for rack concepts.
- Fix drag-and-drop reorder: NetBox sets `CSRF_COOKIE_HTTPONLY`, so the reorder POST's
CSRF token now comes from a rendered `{% csrf_token %}` input instead of the
(JS-invisible) cookie.
- Add per-type component tabs (Interfaces, Front/Rear Ports, Console (Server) Ports,
Power Ports/Outlets) on the concept device page, mirroring real `dcim.Device` pages.
- Copying a real rack (or merging two real racks) into a concept now also copies
internal cabling as ConceptCables.
- Show the peer device/port in component connection columns.
- Fix `IntegrityError` when merging two real racks: `airflow`/`face` can be `NULL` on
a real `Rack`/`Device` but not on the corresponding concept fields.
- Add rack cabling: `ConceptComponent`, `ConceptCable`, device-type component sync,
patch panel front/rear pass-through mapping.
- Add click-to-add on empty rack units, dropping the separate "Add planned device"
button.
- Add images/labels view toggle and clean up device label styling on the elevation.
- Fix rack elevation overlap; add device images to elevation blocks.
- Add rack/concept merge (2 racks or 2 concepts → 1), and a size override when copying
a real rack into a concept.
## 0.1.0
Initial release: rack concept planning, copy/clone/merge/deploy flows, drag-and-drop
elevation, partial-width devices, REST API.