fix: target the correct classes for images-only/labels-only export

Decompiled NetBox core's own bundled JS (netbox.js) to find the real
toggle logic: its "images-only"/"labels-only" control only ever
hides image.device-image and text.device-image-label - it never
touches the plain text.label, relying on an opaque device image to
visually cover it. A device without a photo therefore still shows its
name live, even in "images-only".

apply_rack_view_mode() previously removed .label for images-only and
.device-image/.device-image-label for labels-only, which not only
targeted the wrong element for images-only but also left device-
image-label (the name overlaid on the image) around in labels-only.

For a static, non-interactive export there's no image left to cover
stray text, so per explicit request this deliberately does not mirror
NetBox's live fallback: images-only now always removes every label
(.label and .device-image-label) for a pure image view, and
labels-only removes the image layer (.device-image and
.device-image-label) to reproduce NetBox's own box-with-text view.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-17 15:54:53 +02:00
co-authored by Claude Sonnet 5
parent bfc4382403
commit 3cff66ad33
4 changed files with 19 additions and 13 deletions
+3 -3
View File
@@ -105,14 +105,14 @@ class ApplyRackViewModeTest(SimpleTestCase):
def test_images_and_labels_leaves_svg_untouched(self):
self.assertEqual(apply_rack_view_mode(self.SVG, "images-and-labels"), self.SVG)
def test_images_only_removes_label_text(self):
def test_images_only_keeps_only_the_image(self):
result = apply_rack_view_mode(self.SVG, "images-only")
self.assertNotIn('class="label"', result)
self.assertNotIn("device-image-label", result)
self.assertIn('class="device-image"', result)
self.assertIn('class="device-image-label"', result)
def test_labels_only_removes_device_images(self):
def test_labels_only_keeps_only_the_plain_label(self):
result = apply_rack_view_mode(self.SVG, "labels-only")
self.assertIn('class="label"', result)