Просмотр исходного кода

Fix up device component tab navigation & return URLs

Jeremy Stretch 5 лет назад
Родитель
Сommit
2377e04911

+ 18 - 9
netbox/dcim/tables/devices.py

@@ -258,7 +258,8 @@ class DeviceConsolePortTable(ConsolePortTable):
     actions = ButtonsColumn(
         model=ConsolePort,
         buttons=('edit', 'delete'),
-        prepend_template=CONSOLEPORT_BUTTONS
+        prepend_template=CONSOLEPORT_BUTTONS,
+        return_url_extra='%23tab_consoleports'
     )
 
     class Meta(DeviceComponentTable.Meta):
@@ -290,7 +291,8 @@ class DeviceConsoleServerPortTable(ConsoleServerPortTable):
     actions = ButtonsColumn(
         model=ConsoleServerPort,
         buttons=('edit', 'delete'),
-        prepend_template=CONSOLESERVERPORT_BUTTONS
+        prepend_template=CONSOLESERVERPORT_BUTTONS,
+        return_url_extra='%23tab_consoleserverports'
     )
 
     class Meta(DeviceComponentTable.Meta):
@@ -325,7 +327,8 @@ class DevicePowerPortTable(PowerPortTable):
     actions = ButtonsColumn(
         model=PowerPort,
         buttons=('edit', 'delete'),
-        prepend_template=POWERPORT_BUTTONS
+        prepend_template=POWERPORT_BUTTONS,
+        return_url_extra='%23tab_powerports'
     )
 
     class Meta(DeviceComponentTable.Meta):
@@ -367,7 +370,8 @@ class DevicePowerOutletTable(PowerOutletTable):
     actions = ButtonsColumn(
         model=PowerOutlet,
         buttons=('edit', 'delete'),
-        prepend_template=POWEROUTLET_BUTTONS
+        prepend_template=POWEROUTLET_BUTTONS,
+        return_url_extra='%23tab_poweroutlets'
     )
 
     class Meta(DeviceComponentTable.Meta):
@@ -426,7 +430,8 @@ class DeviceInterfaceTable(InterfaceTable):
     actions = ButtonsColumn(
         model=Interface,
         buttons=('edit', 'delete'),
-        prepend_template=INTERFACE_BUTTONS
+        prepend_template=INTERFACE_BUTTONS,
+        return_url_extra='%23tab_interfaces'
     )
 
     class Meta(DeviceComponentTable.Meta):
@@ -472,7 +477,8 @@ class DeviceFrontPortTable(FrontPortTable):
     actions = ButtonsColumn(
         model=FrontPort,
         buttons=('edit', 'delete'),
-        prepend_template=FRONTPORT_BUTTONS
+        prepend_template=FRONTPORT_BUTTONS,
+        return_url_extra='%23tab_frontports'
     )
 
     class Meta(DeviceComponentTable.Meta):
@@ -509,7 +515,8 @@ class DeviceRearPortTable(RearPortTable):
     actions = ButtonsColumn(
         model=RearPort,
         buttons=('edit', 'delete'),
-        prepend_template=REARPORT_BUTTONS
+        prepend_template=REARPORT_BUTTONS,
+        return_url_extra='%23tab_rearports'
     )
 
     class Meta(DeviceComponentTable.Meta):
@@ -550,7 +557,8 @@ class DeviceDeviceBayTable(DeviceBayTable):
     actions = ButtonsColumn(
         model=DeviceBay,
         buttons=('edit', 'delete'),
-        prepend_template=DEVICEBAY_BUTTONS
+        prepend_template=DEVICEBAY_BUTTONS,
+        return_url_extra='%23tab_devicebays'
     )
 
     class Meta(DeviceComponentTable.Meta):
@@ -589,7 +597,8 @@ class DeviceInventoryItemTable(InventoryItemTable):
     )
     actions = ButtonsColumn(
         model=InventoryItem,
-        buttons=('edit', 'delete')
+        buttons=('edit', 'delete'),
+        return_url_extra='%23tab_inventoryitems'
     )
 
     class Meta(DeviceComponentTable.Meta):

+ 26 - 26
netbox/dcim/tables/template_code.py

@@ -98,9 +98,9 @@ CONSOLEPORT_BUTTONS = """
             <span class="mdi mdi-lan-connect" aria-hidden="true"></span>
         </button>
         <ul class="dropdown-menu dropdown-menu-right">
-            <li><a href="{% url 'dcim:consoleport_connect' termination_a_id=record.pk termination_b_type='console-server-port' %}?return_url={{ device.get_absolute_url }}">Console Server Port</a></li>
-            <li><a href="{% url 'dcim:consoleport_connect' termination_a_id=record.pk termination_b_type='front-port' %}?return_url={{ device.get_absolute_url }}">Front Port</a></li>
-            <li><a href="{% url 'dcim:consoleport_connect' termination_a_id=record.pk termination_b_type='rear-port' %}?return_url={{ device.get_absolute_url }}">Rear Port</a></li>
+            <li><a href="{% url 'dcim:consoleport_connect' termination_a_id=record.pk termination_b_type='console-server-port' %}?return_url={{ device.get_absolute_url }}%23tab_consoleports">Console Server Port</a></li>
+            <li><a href="{% url 'dcim:consoleport_connect' termination_a_id=record.pk termination_b_type='front-port' %}?return_url={{ device.get_absolute_url }}%23tab_consoleports">Front Port</a></li>
+            <li><a href="{% url 'dcim:consoleport_connect' termination_a_id=record.pk termination_b_type='rear-port' %}?return_url={{ device.get_absolute_url }}%23tab_consoleports">Rear Port</a></li>
         </ul>
     </span>
 {% endif %}
@@ -116,9 +116,9 @@ CONSOLESERVERPORT_BUTTONS = """
             <span class="mdi mdi-lan-connect" aria-hidden="true"></span>
         </button>
         <ul class="dropdown-menu dropdown-menu-right">
-            <li><a href="{% url 'dcim:consoleserverport_connect' termination_a_id=record.pk termination_b_type='console-port' %}?return_url={{ device.get_absolute_url }}">Console Port</a></li>
-            <li><a href="{% url 'dcim:consoleserverport_connect' termination_a_id=record.pk termination_b_type='front-port' %}?return_url={{ device.get_absolute_url }}">Front Port</a></li>
-            <li><a href="{% url 'dcim:consoleserverport_connect' termination_a_id=record.pk termination_b_type='rear-port' %}?return_url={{ device.get_absolute_url }}">Rear Port</a></li>
+            <li><a href="{% url 'dcim:consoleserverport_connect' termination_a_id=record.pk termination_b_type='console-port' %}?return_url={{ device.get_absolute_url }}%23tab_consoleserverports">Console Port</a></li>
+            <li><a href="{% url 'dcim:consoleserverport_connect' termination_a_id=record.pk termination_b_type='front-port' %}?return_url={{ device.get_absolute_url }}"%23tab_consoleserverports>Front Port</a></li>
+            <li><a href="{% url 'dcim:consoleserverport_connect' termination_a_id=record.pk termination_b_type='rear-port' %}?return_url={{ device.get_absolute_url }}"%23tab_consoleserverports>Rear Port</a></li>
         </ul>
     </span>
 {% endif %}
@@ -134,8 +134,8 @@ POWERPORT_BUTTONS = """
             <span class="mdi mdi-lan-connect" aria-hidden="true"></span>
         </button>
         <ul class="dropdown-menu dropdown-menu-right">
-            <li><a href="{% url 'dcim:powerport_connect' termination_a_id=record.pk termination_b_type='power-outlet' %}?return_url={{ device.get_absolute_url }}">Power Outlet</a></li>
-            <li><a href="{% url 'dcim:powerport_connect' termination_a_id=record.pk termination_b_type='power-feed' %}?return_url={{ device.get_absolute_url }}">Power Feed</a></li>
+            <li><a href="{% url 'dcim:powerport_connect' termination_a_id=record.pk termination_b_type='power-outlet' %}?return_url={{ device.get_absolute_url }}%23tab_powerports">Power Outlet</a></li>
+            <li><a href="{% url 'dcim:powerport_connect' termination_a_id=record.pk termination_b_type='power-feed' %}?return_url={{ device.get_absolute_url }}%23tab_powerports">Power Feed</a></li>
         </ul>
     </span>
 {% endif %}
@@ -146,7 +146,7 @@ POWEROUTLET_BUTTONS = """
     <a href="{% url 'dcim:poweroutlet_trace' pk=record.pk %}" class="btn btn-primary btn-xs" title="Trace"><i class="mdi mdi-transit-connection-variant"></i></a>
     {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
 {% elif perms.dcim.add_cable %}
-    <a href="{% url 'dcim:poweroutlet_connect' termination_a_id=record.pk termination_b_type='power-port' %}?return_url={{ device.get_absolute_url }}" title="Connect" class="btn btn-success btn-xs">
+    <a href="{% url 'dcim:poweroutlet_connect' termination_a_id=record.pk termination_b_type='power-port' %}?return_url={{ device.get_absolute_url }}%23tab_poweroutlets" title="Connect" class="btn btn-success btn-xs">
         <i class="mdi mdi-lan-connect" aria-hidden="true"></i>
     </a>
 {% endif %}
@@ -154,7 +154,7 @@ POWEROUTLET_BUTTONS = """
 
 INTERFACE_BUTTONS = """
 {% if perms.ipam.add_ipaddress %}
-    <a href="{% url 'ipam:ipaddress_add' %}?interface={{ record.pk }}&return_url={{ device.get_absolute_url }}" class="btn btn-xs btn-success" title="Add IP address">
+    <a href="{% url 'ipam:ipaddress_add' %}?interface={{ record.pk }}&return_url={{ device.get_absolute_url }}%23tab_interfaces" class="btn btn-xs btn-success" title="Add IP address">
         <i class="mdi mdi-plus-thick" aria-hidden="true"></i>
     </a>
 {% endif %}
@@ -167,10 +167,10 @@ INTERFACE_BUTTONS = """
             <span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
         </button>
         <ul class="dropdown-menu dropdown-menu-right">
-            <li><a href="{% url 'dcim:interface_connect' termination_a_id=record.pk termination_b_type='interface' %}?return_url={{ device.get_absolute_url }}">Interface</a></li>
-            <li><a href="{% url 'dcim:interface_connect' termination_a_id=record.pk termination_b_type='front-port' %}?return_url={{ device.get_absolute_url }}">Front Port</a></li>
-            <li><a href="{% url 'dcim:interface_connect' termination_a_id=record.pk termination_b_type='rear-port' %}?return_url={{ device.get_absolute_url }}">Rear Port</a></li>
-            <li><a href="{% url 'dcim:interface_connect' termination_a_id=record.pk termination_b_type='circuit-termination' %}?return_url={{ device.get_absolute_url }}">Circuit Termination</a></li>
+            <li><a href="{% url 'dcim:interface_connect' termination_a_id=record.pk termination_b_type='interface' %}?return_url={{ device.get_absolute_url }}%23tab_interfaces">Interface</a></li>
+            <li><a href="{% url 'dcim:interface_connect' termination_a_id=record.pk termination_b_type='front-port' %}?return_url={{ device.get_absolute_url }}%23tab_interfaces">Front Port</a></li>
+            <li><a href="{% url 'dcim:interface_connect' termination_a_id=record.pk termination_b_type='rear-port' %}?return_url={{ device.get_absolute_url }}%23tab_interfaces">Rear Port</a></li>
+            <li><a href="{% url 'dcim:interface_connect' termination_a_id=record.pk termination_b_type='circuit-termination' %}?return_url={{ device.get_absolute_url }}%23tab_interfaces">Circuit Termination</a></li>
         </ul>
     </span>
 {% endif %}
@@ -186,12 +186,12 @@ FRONTPORT_BUTTONS = """
             <span class="mdi mdi-lan-connect" aria-hidden="true"></span>
         </button>
         <ul class="dropdown-menu dropdown-menu-right">
-            <li><a href="{% url 'dcim:frontport_connect' termination_a_id=record.pk termination_b_type='interface' %}?return_url={{ device.get_absolute_url }}">Interface</a></li>
-            <li><a href="{% url 'dcim:frontport_connect' termination_a_id=record.pk termination_b_type='console-server-port' %}?return_url={{ device.get_absolute_url }}">Console Server Port</a></li>
-            <li><a href="{% url 'dcim:frontport_connect' termination_a_id=record.pk termination_b_type='console-port' %}?return_url={{ device.get_absolute_url }}">Console Port</a></li>
-            <li><a href="{% url 'dcim:frontport_connect' termination_a_id=record.pk termination_b_type='front-port' %}?return_url={{ device.get_absolute_url }}">Front Port</a></li>
-            <li><a href="{% url 'dcim:frontport_connect' termination_a_id=record.pk termination_b_type='rear-port' %}?return_url={{ device.get_absolute_url }}">Rear Port</a></li>
-            <li><a href="{% url 'dcim:frontport_connect' termination_a_id=record.pk termination_b_type='circuit-termination' %}?return_url={{ device.get_absolute_url }}">Circuit Termination</a></li>
+            <li><a href="{% url 'dcim:frontport_connect' termination_a_id=record.pk termination_b_type='interface' %}?return_url={{ device.get_absolute_url }}%23tab_frontports">Interface</a></li>
+            <li><a href="{% url 'dcim:frontport_connect' termination_a_id=record.pk termination_b_type='console-server-port' %}?return_url={{ device.get_absolute_url }}%23tab_frontports">Console Server Port</a></li>
+            <li><a href="{% url 'dcim:frontport_connect' termination_a_id=record.pk termination_b_type='console-port' %}?return_url={{ device.get_absolute_url }}%23tab_frontports">Console Port</a></li>
+            <li><a href="{% url 'dcim:frontport_connect' termination_a_id=record.pk termination_b_type='front-port' %}?return_url={{ device.get_absolute_url }}%23tab_frontports">Front Port</a></li>
+            <li><a href="{% url 'dcim:frontport_connect' termination_a_id=record.pk termination_b_type='rear-port' %}?return_url={{ device.get_absolute_url }}%23tab_frontports">Rear Port</a></li>
+            <li><a href="{% url 'dcim:frontport_connect' termination_a_id=record.pk termination_b_type='circuit-termination' %}?return_url={{ device.get_absolute_url }}%23tab_frontports">Circuit Termination</a></li>
         </ul>
     </span>
 {% endif %}
@@ -207,10 +207,10 @@ REARPORT_BUTTONS = """
             <span class="mdi mdi-lan-connect" aria-hidden="true"></span>
         </button>
         <ul class="dropdown-menu dropdown-menu-right">
-            <li><a href="{% url 'dcim:rearport_connect' termination_a_id=record.pk termination_b_type='interface' %}?return_url={{ device.get_absolute_url }}">Interface</a></li>
-            <li><a href="{% url 'dcim:rearport_connect' termination_a_id=record.pk termination_b_type='front-port' %}?return_url={{ device.get_absolute_url }}">Front Port</a></li>
-            <li><a href="{% url 'dcim:rearport_connect' termination_a_id=record.pk termination_b_type='rear-port' %}?return_url={{ device.get_absolute_url }}">Rear Port</a></li>
-            <li><a href="{% url 'dcim:rearport_connect' termination_a_id=record.pk termination_b_type='circuit-termination' %}?return_url={{ device.get_absolute_url }}">Circuit Termination</a></li>
+            <li><a href="{% url 'dcim:rearport_connect' termination_a_id=record.pk termination_b_type='interface' %}?return_url={{ device.get_absolute_url }}%23tab_rearports">Interface</a></li>
+            <li><a href="{% url 'dcim:rearport_connect' termination_a_id=record.pk termination_b_type='front-port' %}?return_url={{ device.get_absolute_url }}%23tab_rearports">Front Port</a></li>
+            <li><a href="{% url 'dcim:rearport_connect' termination_a_id=record.pk termination_b_type='rear-port' %}?return_url={{ device.get_absolute_url }}%23tab_rearports">Rear Port</a></li>
+            <li><a href="{% url 'dcim:rearport_connect' termination_a_id=record.pk termination_b_type='circuit-termination' %}?return_url={{ device.get_absolute_url }}%23tab_rearports">Circuit Termination</a></li>
         </ul>
     </span>
 {% endif %}
@@ -219,11 +219,11 @@ REARPORT_BUTTONS = """
 DEVICEBAY_BUTTONS = """
 {% if perms.dcim.change_devicebay %}
     {% if record.installed_device %}
-        <a href="{% url 'dcim:devicebay_depopulate' pk=record.pk %}" class="btn btn-danger btn-xs">
+        <a href="{% url 'dcim:devicebay_depopulate' pk=record.pk %}?return_url={{ device.get_absolute_url }}%23tab_devicebays" class="btn btn-danger btn-xs">
             <i class="mdi mdi-close-thick" aria-hidden="true" title="Remove device"></i>
         </a>
     {% else %}
-        <a href="{% url 'dcim:devicebay_populate' pk=record.pk %}" class="btn btn-success btn-xs">
+        <a href="{% url 'dcim:devicebay_populate' pk=record.pk %}?return_url={{ device.get_absolute_url }}%23tab_devicebays" class="btn btn-success btn-xs">
             <i class="mdi mdi-plus-thick" aria-hidden="true" title="Install device"></i>
         </a>
     {% endif %}

+ 4 - 6
netbox/dcim/views.py

@@ -1747,7 +1747,7 @@ class DeviceBayPopulateView(ObjectEditView):
         return render(request, 'dcim/devicebay_populate.html', {
             'device_bay': device_bay,
             'form': form,
-            'return_url': reverse('dcim:device', kwargs={'pk': device_bay.device.pk}),
+            'return_url': self.get_return_url(request, device_bay),
         })
 
     def post(self, request, pk):
@@ -1765,7 +1765,7 @@ class DeviceBayPopulateView(ObjectEditView):
         return render(request, 'dcim/devicebay_populate.html', {
             'device_bay': device_bay,
             'form': form,
-            'return_url': reverse('dcim:device', kwargs={'pk': device_bay.device.pk}),
+            'return_url': self.get_return_url(request, device_bay),
         })
 
 
@@ -1773,18 +1773,16 @@ class DeviceBayDepopulateView(ObjectEditView):
     queryset = DeviceBay.objects.all()
 
     def get(self, request, pk):
-
         device_bay = get_object_or_404(self.queryset, pk=pk)
         form = ConfirmationForm()
 
         return render(request, 'dcim/devicebay_depopulate.html', {
             'device_bay': device_bay,
             'form': form,
-            'return_url': reverse('dcim:device', kwargs={'pk': device_bay.device.pk}),
+            'return_url': self.get_return_url(request, device_bay),
         })
 
     def post(self, request, pk):
-
         device_bay = get_object_or_404(self.queryset, pk=pk)
         form = ConfirmationForm(request.POST)
 
@@ -1800,7 +1798,7 @@ class DeviceBayDepopulateView(ObjectEditView):
         return render(request, 'dcim/devicebay_depopulate.html', {
             'device_bay': device_bay,
             'form': form,
-            'return_url': reverse('dcim:device', kwargs={'pk': device_bay.device.pk}),
+            'return_url': self.get_return_url(request, device_bay),
         })
 
 

+ 1 - 1
netbox/templates/dcim/device.html

@@ -873,7 +873,7 @@ var prefix = "tab_";
 if (hash) {
     $('.nav-pills a[href="'+hash.replace(prefix,"")+'"]').tab('show');
 }
-$('.nav-tabs a').on('shown.bs.tab', function (e) {
+$('.nav-pills a').on('shown.bs.tab', function (e) {
     window.location.hash = e.target.hash.replace("#", "#" + prefix);
 });