Compare commits

...

8 Commits

Author SHA1 Message Date
Arthur Hanson
6f7e9f8692
Merge 5f58fe1eb5 into f61a2964c8 2025-07-09 15:28:52 +02:00
github-actions
f61a2964c8 Update source translation strings 2025-07-09 05:04:52 +00:00
Jason Novinger
ee94fb0b94
Closes #19550: Enhancement: Refactor rack elevations template for lazy loading /dcim/rack-elevations/ (#19823)
* Refactor rack elevation template to use htmx for dynamic loading and improved user experience

* rework to prevent dup loading

* Update netbox/templates/dcim/inc/rack_elevation.html

Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>

* Update netbox/templates/dcim/inc/rack_elevation.html

Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>

* Move inline styles to styles/custom/racks.css

---------

Co-authored-by: tony.nealon@wholesailnetworks.com <tony.nealon@wholesailnetworks.com>
Co-authored-by: tbotnz <tonynealon1989@gmail.com>
Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>
2025-07-08 11:20:04 -04:00
Harry
8fb8f4c75b
Closes #19571: Create expansion_card.json (#19689)
* Create expansion_card.json

* Update 0206_load_module_type_profiles.py

* Update expansion_card.json

Fixed
2025-07-08 08:27:48 -05:00
Arthur
5f58fe1eb5 Merge branch 'main' into 15390-cable 2025-06-02 15:07:55 -07:00
Arthur
5fb81e9943 #15390 add trace signal if cable terminatiions changed 2025-05-29 15:14:31 -07:00
Arthur
e8891f770c #15390 add trace signal if cable terminatiions changed 2025-05-29 14:39:41 -07:00
Arthur
4739f27c14 #15390 add trace signal if cable terminatiions changed 2025-05-29 13:52:00 -07:00
8 changed files with 72 additions and 5 deletions

View File

@ -19,7 +19,8 @@ def load_initial_data(apps, schema_editor):
'gpu',
'hard_disk',
'memory',
'power_supply'
'power_supply',
'expansion_card'
)
for name in initial_profiles:

View File

@ -0,0 +1,15 @@
{
"name": "Expansion card",
"schema": {
"properties": {
"connector_type": {
"type": "string",
"description": "Connector type e.g. PCIe x4"
},
"bandwidth": {
"type": "integer",
"description": "Total Bandwidth for this module"
}
}
}
}

View File

@ -220,6 +220,7 @@ class Cable(PrimaryModel):
b_terminations = {ct.termination: ct for ct in self.terminations.filter(cable_end='B')}
# Delete stale CableTerminations
if self._terminations_modified:
for termination, ct in a_terminations.items():
if termination.pk and termination not in self.a_terminations:
@ -312,6 +313,12 @@ class CableTermination(ChangeLoggedModel):
def __str__(self):
return f'Cable {self.cable} to {self.termination}'
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self._orig_cable = self.__dict__.get('cable')
self._orig_cable_end = self.__dict__.get('cable_end')
def clean(self):
super().clean()
@ -349,6 +356,7 @@ class CableTermination(ChangeLoggedModel):
# Cache objects associated with the terminating object (for filtering)
self.cache_related_objects()
created = self.pk is None
super().save(*args, **kwargs)
@ -359,6 +367,28 @@ class CableTermination(ChangeLoggedModel):
termination.cable_end = self.cable_end
termination.save()
# figure out which cable terminations changed
if not created:
update_cable_termination = False
update_orig_cable_termination = False
if self._orig_cable and self._orig_cable != self.cable:
update_cable_termination = True
update_orig_cable_termination = True
elif self._orig_cable_end and self._orig_cable_end != self.cable_end:
update_cable_termination = True
if update_cable_termination:
self.cable._terminations_modified = True
trace_paths.send(Cable, instance=self.cable, created=False)
if update_orig_cable_termination:
self._orig_cable._terminations_modified = True
trace_paths.send(Cable, instance=self._orig_cable, created=False)
self._orig_cable_end = self.cable_end
self._orig_cable = self.cable
def delete(self, *args, **kwargs):
# Delete the cable association on the terminating object
@ -369,6 +399,7 @@ class CableTermination(ChangeLoggedModel):
termination.save()
super().delete(*args, **kwargs)
trace_paths.send(Cable, instance=self.cable, created=False)
def cache_related_objects(self):
"""

Binary file not shown.

View File

@ -0,0 +1,4 @@
.rack-loading-container {
min-height: 200px;
margin-left: 30px;
}

View File

@ -27,3 +27,4 @@
@import 'custom/markdown';
@import 'custom/misc';
@import 'custom/notifications';
@import 'custom/racks';

View File

@ -1,6 +1,17 @@
{% load i18n %}
<div style="margin-left: -30px">
<object data="{% url 'dcim-api:rack-elevation' pk=object.pk %}?face={{face}}&render=svg{% if extra_params %}&{{ extra_params }}{% endif %}" class="rack_elevation" aria-label="{% trans "Rack elevation" %}"></object>
<div
hx-get="{% url 'dcim-api:rack-elevation' pk=object.pk %}?face={{ face }}&render=svg{% if extra_params %}&{{ extra_params }}{% endif %}"
hx-trigger="intersect"
hx-swap="outerHTML"
aria-label="{% trans "Rack elevation" %}"
>
<div class="d-flex justify-content-center align-items-center rack-loading-container">
<div class="spinner-border" role="status">
<span class="visually-hidden">{% trans "Loading..." %}</span>
</div>
</div>
</div>
</div>
<div class="text-center mt-3">
<a class="btn btn-outline-primary" href="{% url 'dcim-api:rack-elevation' pk=object.pk %}?face={{face}}&render=svg{% if extra_params %}&{{ extra_params }}{% endif %}" hx-boost="false">

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-07-03 05:04+0000\n"
"POT-Creation-Date: 2025-07-09 05:04+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -13021,7 +13021,7 @@ msgid "Cable Trace for %(object_type)s %(object)s"
msgstr ""
#: netbox/templates/dcim/cable_trace.html:24
#: netbox/templates/dcim/inc/rack_elevation.html:7
#: netbox/templates/dcim/inc/rack_elevation.html:18
msgid "Download SVG"
msgstr ""
@ -13424,10 +13424,14 @@ msgstr ""
msgid "Descending Units"
msgstr ""
#: netbox/templates/dcim/inc/rack_elevation.html:3
#: netbox/templates/dcim/inc/rack_elevation.html:7
msgid "Rack elevation"
msgstr ""
#: netbox/templates/dcim/inc/rack_elevation.html:11
msgid "Loading..."
msgstr ""
#: netbox/templates/dcim/interface.html:17
msgid "Add Child Interface"
msgstr ""