jeremystretch 3 лет назад
Родитель
Сommit
0ef1bc8490

+ 29 - 23
netbox/templates/dcim/device/consoleports.html

@@ -16,31 +16,37 @@
     </div>
 
     <div class="noprint bulk-buttons">
+      <div class="bulk-button-group">
+        {% if perms.dcim.change_consoleport %}
+          <div class="btn-group" role="group">
+            <button type="submit" name="_edit" formaction="{% url 'dcim:consoleport_bulk_edit' %}?device={{ object.pk }}&return_url={% url 'dcim:device_consoleports' pk=object.pk %}" class="btn btn-warning btn-sm">
+              <i class="mdi mdi-pencil" aria-hidden="true"></i> Edit
+            </button>
+            <button type="submit" name="_rename" formaction="{% url 'dcim:consoleport_bulk_rename' %}?return_url={% url 'dcim:device_consoleports' pk=object.pk %}" class="btn btn-outline-warning btn-sm">
+              <i class="mdi mdi-pencil-outline" aria-hidden="true"></i> Rename
+            </button>
+          </div>
+        {% endif %}
+        <div class="btn-group" role="group">
+          {% if perms.dcim.delete_consoleport %}
+            <button type="submit" name="_delete" formaction="{% url 'dcim:consoleport_bulk_delete' %}?return_url={% url 'dcim:device_consoleports' pk=object.pk %}" class="btn btn-danger btn-sm">
+              <i class="mdi mdi-trash-can-outline" aria-hidden="true"></i> Delete
+            </button>
+          {% endif %}
+          {% if perms.dcim.change_consoleport %}
+            <button type="submit" name="_disconnect" formaction="{% url 'dcim:consoleport_bulk_disconnect' %}?return_url={% url 'dcim:device_consoleports' pk=object.pk %}" class="btn btn-outline-danger btn-sm">
+              <span class="mdi mdi-ethernet-cable-off" aria-hidden="true"></span> Disconnect
+            </button>
+          {% endif %}
+        </div>
+      </div>
+      {% if perms.dcim.add_consoleport %}
         <div class="bulk-button-group">
-            {% if perms.dcim.change_consoleport %}
-                <button type="submit" name="_rename" formaction="{% url 'dcim:consoleport_bulk_rename' %}?return_url={% url 'dcim:device_consoleports' pk=object.pk %}" class="btn btn-outline-warning btn-sm">
-                    <i class="mdi mdi-pencil-outline" aria-hidden="true"></i> Rename
-                </button>
-                <button type="submit" name="_edit" formaction="{% url 'dcim:consoleport_bulk_edit' %}?device={{ object.pk }}&return_url={% url 'dcim:device_consoleports' pk=object.pk %}" class="btn btn-warning btn-sm">
-                    <i class="mdi mdi-pencil" aria-hidden="true"></i> Edit
-                </button>
-                <button type="submit" name="_disconnect" formaction="{% url 'dcim:consoleport_bulk_disconnect' %}?return_url={% url 'dcim:device_consoleports' pk=object.pk %}" class="btn btn-outline-danger btn-sm">
-                    <span class="mdi mdi-ethernet-cable-off" aria-hidden="true"></span> Disconnect
-                </button>
-            {% endif %}
-            {% if perms.dcim.delete_consoleport %}
-                <button type="submit" name="_delete" formaction="{% url 'dcim:consoleport_bulk_delete' %}?return_url={% url 'dcim:device_consoleports' pk=object.pk %}" class="btn btn-danger btn-sm">
-                    <i class="mdi mdi-trash-can-outline" aria-hidden="true"></i> Delete
-                </button>
-            {% endif %}
+          <a href="{% url 'dcim:consoleport_add' %}?device={{ object.pk }}&return_url={% url 'dcim:device_consoleports' pk=object.pk %}" class="btn btn-sm btn-primary">
+            <i class="mdi mdi-plus-thick" aria-hidden="true"></i> Add Console Port
+          </a>
         </div>
-        {% if perms.dcim.add_consoleport %}
-            <div class="bulk-button-group">
-                <a href="{% url 'dcim:consoleport_add' %}?device={{ object.pk }}&return_url={% url 'dcim:device_consoleports' pk=object.pk %}" class="btn btn-sm btn-primary">
-                    <i class="mdi mdi-plus-thick" aria-hidden="true"></i> Add Console Port
-                </a>
-            </div>
-        {% endif %}
+      {% endif %}
     </div>
   </form>
 {% endblock %}

+ 29 - 23
netbox/templates/dcim/device/consoleserverports.html

@@ -16,31 +16,37 @@
     </div>
 
     <div class="noprint bulk-buttons">
+      <div class="bulk-button-group">
+        {% if perms.dcim.change_consoleserverport %}
+          <div class="btn-group" role="group">
+            <button type="submit" name="_edit" formaction="{% url 'dcim:consoleserverport_bulk_edit' %}?device={{ object.pk }}&return_url={% url 'dcim:device_consoleserverports' pk=object.pk %}" class="btn btn-warning btn-sm">
+              <i class="mdi mdi-pencil" aria-hidden="true"></i> Edit
+            </button>
+            <button type="submit" name="_rename" formaction="{% url 'dcim:consoleserverport_bulk_rename' %}?return_url={% url 'dcim:device_consoleserverports' pk=object.pk %}" class="btn btn-outline-warning btn-sm">
+              <i class="mdi mdi-pencil-outline" aria-hidden="true"></i> Rename
+            </button>
+          </div>
+        {% endif %}
+        <div class="btn-group" role="group">
+          {% if perms.dcim.delete_consoleserverport %}
+            <button type="submit" formaction="{% url 'dcim:consoleserverport_bulk_delete' %}?return_url={% url 'dcim:device_consoleserverports' pk=object.pk %}" class="btn btn-danger btn-sm">
+              <i class="mdi mdi-trash-can-outline" aria-hidden="true"></i> Delete
+            </button>
+          {% endif %}
+          {% if perms.dcim.change_consoleserverport %}
+            <button type="submit" name="_disconnect" formaction="{% url 'dcim:consoleserverport_bulk_disconnect' %}?return_url={% url 'dcim:device_consoleserverports' pk=object.pk %}" class="btn btn-outline-danger btn-sm">
+              <span class="mdi mdi-ethernet-cable-off" aria-hidden="true"></span> Disconnect
+            </button>
+          {% endif %}
+        </div>
+      </div>
+      {% if perms.dcim.add_consoleserverport %}
         <div class="bulk-button-group">
-            {% if perms.dcim.change_consoleserverport %}
-                <button type="submit" name="_rename" formaction="{% url 'dcim:consoleserverport_bulk_rename' %}?return_url={% url 'dcim:device_consoleserverports' pk=object.pk %}" class="btn btn-outline-warning btn-sm">
-                    <i class="mdi mdi-pencil-outline" aria-hidden="true"></i> Rename
-                </button>
-                <button type="submit" name="_edit" formaction="{% url 'dcim:consoleserverport_bulk_edit' %}?device={{ object.pk }}&return_url={% url 'dcim:device_consoleserverports' pk=object.pk %}" class="btn btn-warning btn-sm">
-                    <i class="mdi mdi-pencil" aria-hidden="true"></i> Edit
-                </button>
-                <button type="submit" name="_disconnect" formaction="{% url 'dcim:consoleserverport_bulk_disconnect' %}?return_url={% url 'dcim:device_consoleserverports' pk=object.pk %}" class="btn btn-outline-danger btn-sm">
-                    <span class="mdi mdi-ethernet-cable-off" aria-hidden="true"></span> Disconnect
-                </button>
-            {% endif %}
-            {% if perms.dcim.delete_consoleserverport %}
-                <button type="submit" formaction="{% url 'dcim:consoleserverport_bulk_delete' %}?return_url={% url 'dcim:device_consoleserverports' pk=object.pk %}" class="btn btn-danger btn-sm">
-                    <i class="mdi mdi-trash-can-outline" aria-hidden="true"></i> Delete
-                </button>
-            {% endif %}
+          <a href="{% url 'dcim:consoleserverport_add' %}?device={{ object.pk }}&return_url={% url 'dcim:device_consoleserverports' pk=object.pk %}" class="btn btn-primary btn-sm">
+            <i class="mdi mdi-plus-thick" aria-hidden="true"></i> Add Console Server Ports
+          </a>
         </div>
-        {% if perms.dcim.add_consoleserverport %}
-            <div class="bulk-button-group">
-                <a href="{% url 'dcim:consoleserverport_add' %}?device={{ object.pk }}&return_url={% url 'dcim:device_consoleserverports' pk=object.pk %}" class="btn btn-primary btn-sm">
-                    <i class="mdi mdi-plus-thick" aria-hidden="true"></i> Add Console Server Ports
-                </a>
-            </div>
-        {% endif %}
+      {% endif %}
     </div>
   </form>
 {% endblock %}

+ 22 - 20
netbox/templates/dcim/device/devicebays.html

@@ -16,28 +16,30 @@
     </div>
 
     <div class="noprint bulk-buttons">
+      <div class="bulk-button-group">
+        {% if perms.dcim.change_devicebay %}
+          <div class="btn-group" role="group">
+            <button type="submit" name="_edit" formaction="{% url 'dcim:devicebay_bulk_edit' %}?device={{ object.pk }}&return_url={% url 'dcim:device_devicebays' pk=object.pk %}" class="btn btn-warning btn-sm">
+              <i class="mdi mdi-pencil" aria-hidden="true"></i> Edit
+            </button>
+            <button type="submit" name="_rename" formaction="{% url 'dcim:devicebay_bulk_rename' %}?return_url={% url 'dcim:device_devicebays' pk=object.pk %}" class="btn btn-outline-warning btn-sm">
+              <i class="mdi mdi-pencil-outline" aria-hidden="true"></i> Rename
+            </button>
+          </div>
+        {% endif %}
+        {% if perms.dcim.delete_devicebay %}
+          <button type="submit" name="_delete" formaction="{% url 'dcim:devicebay_bulk_delete' %}?return_url={% url 'dcim:device_devicebays' pk=object.pk %}" class="btn btn-danger btn-sm">
+            <i class="mdi mdi-trash-can-outline" aria-hidden="true"></i> Delete
+          </button>
+        {% endif %}
+      </div>
+      {% if perms.dcim.add_devicebay %}
         <div class="bulk-button-group">
-            {% if perms.dcim.change_devicebay %}
-                <button type="submit" name="_rename" formaction="{% url 'dcim:devicebay_bulk_rename' %}?return_url={% url 'dcim:device_devicebays' pk=object.pk %}" class="btn btn-outline-warning btn-sm">
-                    <i class="mdi mdi-pencil-outline" aria-hidden="true"></i> Rename
-                </button>
-                <button type="submit" name="_edit" formaction="{% url 'dcim:devicebay_bulk_edit' %}?device={{ object.pk }}&return_url={% url 'dcim:device_devicebays' pk=object.pk %}" class="btn btn-warning btn-sm">
-                    <i class="mdi mdi-pencil" aria-hidden="true"></i> Edit
-                </button>
-            {% endif %}
-            {% if perms.dcim.delete_devicebay %}
-                <button type="submit" formaction="{% url 'dcim:devicebay_bulk_delete' %}?return_url={% url 'dcim:device_devicebays' pk=object.pk %}" class="btn btn-outline-danger btn-sm">
-                    <i class="mdi mdi-trash-can-outline" aria-hidden="true"></i> Delete selected
-                </button>
-            {% endif %}
+          <a href="{% url 'dcim:devicebay_add' %}?device={{ object.pk }}&return_url={% url 'dcim:device_devicebays' pk=object.pk %}" class="btn btn-primary btn-sm">
+            <i class="mdi mdi-plus-thick" aria-hidden="true"></i> Add Device Bays
+          </a>
         </div>
-        {% if perms.dcim.add_devicebay %}
-            <div class="bulk-button-group">
-                <a href="{% url 'dcim:devicebay_add' %}?device={{ object.pk }}&return_url={% url 'dcim:device_devicebays' pk=object.pk %}" class="btn btn-primary btn-sm">
-                    <i class="mdi mdi-plus-thick" aria-hidden="true"></i> Add Device Bays
-                </a>
-            </div>
-        {% endif %}
+      {% endif %}
     </div>
   </form>
 {% endblock %}

+ 29 - 23
netbox/templates/dcim/device/frontports.html

@@ -16,31 +16,37 @@
     </div>
 
     <div class="noprint bulk-buttons">
+      <div class="bulk-button-group">
+        {% if perms.dcim.change_frontport %}
+          <div class="btn-group" role="group">
+            <button type="submit" name="_edit" formaction="{% url 'dcim:frontport_bulk_edit' %}?device={{ object.pk }}&return_url={% url 'dcim:device_frontports' pk=object.pk %}" class="btn btn-warning btn-sm">
+              <i class="mdi mdi-pencil" aria-hidden="true"></i> Edit
+            </button>
+            <button type="submit" name="_rename" formaction="{% url 'dcim:frontport_bulk_rename' %}?return_url={% url 'dcim:device_frontports' pk=object.pk %}" class="btn btn-outline-warning btn-sm">
+              <i class="mdi mdi-pencil-outline" aria-hidden="true"></i> Rename
+            </button>
+          </div>
+        {% endif %}
+        <div class="btn-group" role="group">
+          {% if perms.dcim.delete_frontport %}
+            <button type="submit" formaction="{% url 'dcim:frontport_bulk_delete' %}?return_url={% url 'dcim:device_frontports' pk=object.pk %}" class="btn btn-danger btn-sm">
+              <i class="mdi mdi-trash-can-outline" aria-hidden="true"></i> Delete
+            </button>
+          {% endif %}
+          {% if perms.dcim.change_frontport %}
+            <button type="submit" name="_disconnect" formaction="{% url 'dcim:frontport_bulk_disconnect' %}?return_url={% url 'dcim:device_frontports' pk=object.pk %}" class="btn btn-outline-danger btn-sm">
+              <span class="mdi mdi-ethernet-cable-off" aria-hidden="true"></span> Disconnect
+            </button>
+          {% endif %}
+        </div>
+      </div>
+      {% if perms.dcim.add_frontport %}
         <div class="bulk-button-group">
-            {% if perms.dcim.change_frontport %}
-                <button type="submit" name="_rename" formaction="{% url 'dcim:frontport_bulk_rename' %}?return_url={% url 'dcim:device_frontports' pk=object.pk %}" class="btn btn-outline-warning btn-sm">
-                    <i class="mdi mdi-pencil-outline" aria-hidden="true"></i> Rename
-                </button>
-                <button type="submit" name="_edit" formaction="{% url 'dcim:frontport_bulk_edit' %}?device={{ object.pk }}&return_url={% url 'dcim:device_frontports' pk=object.pk %}" class="btn btn-warning btn-sm">
-                    <i class="mdi mdi-pencil" aria-hidden="true"></i> Edit
-                </button>
-                <button type="submit" name="_disconnect" formaction="{% url 'dcim:frontport_bulk_disconnect' %}?return_url={% url 'dcim:device_frontports' pk=object.pk %}" class="btn btn-outline-danger btn-sm">
-                    <span class="mdi mdi-ethernet-cable-off" aria-hidden="true"></span> Disconnect
-                </button>
-            {% endif %}
-            {% if perms.dcim.delete_frontport %}
-                <button type="submit" formaction="{% url 'dcim:frontport_bulk_delete' %}?return_url={% url 'dcim:device_frontports' pk=object.pk %}" class="btn btn-danger btn-sm">
-                    <i class="mdi mdi-trash-can-outline" aria-hidden="true"></i> Delete
-                </button>
-            {% endif %}
+          <a href="{% url 'dcim:frontport_add' %}?device={{ object.pk }}&return_url={% url 'dcim:device_frontports' pk=object.pk %}" class="btn btn-primary btn-sm">
+            <i class="mdi mdi-plus-thick" aria-hidden="true"></i> Add front ports
+          </a>
         </div>
-        {% if perms.dcim.add_frontport %}
-            <div class="bulk-button-group">
-                <a href="{% url 'dcim:frontport_add' %}?device={{ object.pk }}&return_url={% url 'dcim:device_frontports' pk=object.pk %}" class="btn btn-primary btn-sm">
-                    <i class="mdi mdi-plus-thick" aria-hidden="true"></i> Add front ports
-                </a>
-            </div>
-        {% endif %}
+      {% endif %}
     </div>
   </form>
 {% endblock %}

+ 28 - 23
netbox/templates/dcim/device/interfaces.html

@@ -9,7 +9,6 @@
 <form method="post">
   {% csrf_token %}
 
-
   <div class="card">
     <div class="card-body" id="object_list">
       {% include 'htmx/table.html' %}
@@ -19,29 +18,35 @@
   <div class="noprint bulk-buttons">
     <div class="bulk-button-group">
       {% if perms.dcim.change_interface %}
-      <button type="submit" name="_rename"
-        formaction="{% url 'dcim:interface_bulk_rename' %}?return_url={% url 'dcim:device_interfaces' pk=object.pk %}"
-        class="btn btn-outline-warning btn-sm">
-        <i class="mdi mdi-pencil-outline" aria-hidden="true"></i> Rename
-      </button>
-      <button type="submit" name="_edit"
-        formaction="{% url 'dcim:interface_bulk_edit' %}?device={{ object.pk }}&return_url={% url 'dcim:device_interfaces' pk=object.pk %}"
-        class="btn btn-warning btn-sm">
-        <i class="mdi mdi-pencil" aria-hidden="true"></i> Edit
-      </button>
-      <button type="submit" name="_disconnect"
-        formaction="{% url 'dcim:interface_bulk_disconnect' %}?return_url={% url 'dcim:device_interfaces' pk=object.pk %}"
-        class="btn btn-outline-danger btn-sm">
-        <span class="mdi mdi-ethernet-cable-off" aria-hidden="true"></span> Disconnect
-      </button>
-      {% endif %}
-      {% if perms.dcim.delete_interface %}
-      <button type="submit" name="_delete"
-        formaction="{% url 'dcim:interface_bulk_delete' %}?return_url={% url 'dcim:device_interfaces' pk=object.pk %}"
-        class="btn btn-danger btn-sm">
-        <i class="mdi mdi-trash-can-outline" aria-hidden="true"></i> Delete
-      </button>
+        <div class="btn-group" role="group">
+          <button type="submit" name="_edit"
+            formaction="{% url 'dcim:interface_bulk_edit' %}?device={{ object.pk }}&return_url={% url 'dcim:device_interfaces' pk=object.pk %}"
+            class="btn btn-warning btn-sm">
+            <i class="mdi mdi-pencil" aria-hidden="true"></i> Edit
+          </button>
+          <button type="submit" name="_rename"
+            formaction="{% url 'dcim:interface_bulk_rename' %}?return_url={% url 'dcim:device_interfaces' pk=object.pk %}"
+            class="btn btn-outline-warning btn-sm">
+            <i class="mdi mdi-pencil-outline" aria-hidden="true"></i> Rename
+          </button>
+        </div>
       {% endif %}
+      <div class="btn-group" role="group">
+        {% if perms.dcim.delete_interface %}
+          <button type="submit" name="_delete"
+            formaction="{% url 'dcim:interface_bulk_delete' %}?return_url={% url 'dcim:device_interfaces' pk=object.pk %}"
+            class="btn btn-danger btn-sm">
+            <i class="mdi mdi-trash-can-outline" aria-hidden="true"></i> Delete
+          </button>
+        {% endif %}
+        {% if perms.dcim.change_interface %}
+          <button type="submit" name="_disconnect"
+            formaction="{% url 'dcim:interface_bulk_disconnect' %}?return_url={% url 'dcim:device_interfaces' pk=object.pk %}"
+            class="btn btn-outline-danger btn-sm">
+            <span class="mdi mdi-ethernet-cable-off" aria-hidden="true"></span> Disconnect
+          </button>
+        {% endif %}
+      </div>
     </div>
     {% if perms.dcim.add_interface %}
     <div class="bulk-button-group">

+ 22 - 20
netbox/templates/dcim/device/inventory.html

@@ -16,28 +16,30 @@
     </div>
 
     <div class="noprint bulk-buttons">
+      <div class="bulk-button-group">
+        {% if perms.dcim.change_inventoryitem %}
+          <div class="btn-group" role="group">
+            <button type="submit" name="_edit" formaction="{% url 'dcim:inventoryitem_bulk_edit' %}?device={{ object.pk }}&return_url={% url 'dcim:device_inventory' pk=object.pk %}" class="btn btn-warning btn-sm">
+              <i class="mdi mdi-pencil" aria-hidden="true"></i> Edit
+            </button>
+            <button type="submit" name="_rename" formaction="{% url 'dcim:inventoryitem_bulk_rename' %}?return_url={% url 'dcim:device_inventory' pk=object.pk %}" class="btn btn-outline-warning btn-sm">
+              <i class="mdi mdi-pencil-outline" aria-hidden="true"></i> Rename
+            </button>
+          </div>
+        {% endif %}
+        {% if perms.dcim.delete_inventoryitem %}
+          <button type="submit" name="_delete" formaction="{% url 'dcim:inventoryitem_bulk_delete' %}?return_url={% url 'dcim:device_inventory' pk=object.pk %}" class="btn btn-danger btn-sm">
+            <i class="mdi mdi-trash-can-outline" aria-hidden="true"></i> Delete
+          </button>
+        {% endif %}
+      </div>
+      {% if perms.dcim.add_inventoryitem %}
         <div class="bulk-button-group">
-            {% if perms.dcim.change_inventoryitem %}
-                <button type="submit" name="_rename" formaction="{% url 'dcim:inventoryitem_bulk_rename' %}?return_url={% url 'dcim:device_inventory' pk=object.pk %}" class="btn btn-warning btn-sm">
-                    <i class="mdi mdi-pencil-outline" aria-hidden="true"></i> Rename
-                </button>
-                <button type="submit" name="_edit" formaction="{% url 'dcim:inventoryitem_bulk_edit' %}?device={{ object.pk }}&return_url={% url 'dcim:device_inventory' pk=object.pk %}" class="btn btn-warning btn-sm">
-                    <i class="mdi mdi-pencil" aria-hidden="true"></i> Edit
-                </button>
-            {% endif %}
-            {% if perms.dcim.delete_inventoryitem %}
-                <button type="submit" name="_delete" formaction="{% url 'dcim:inventoryitem_bulk_delete' %}?return_url={% url 'dcim:device_inventory' pk=object.pk %}" class="btn btn-danger btn-sm">
-                    <i class="mdi mdi-trash-can-outline" aria-hidden="true"></i> Delete
-                </button>
-            {% endif %}
+          <a href="{% url 'dcim:inventoryitem_add' %}?device={{ object.pk }}&return_url={% url 'dcim:device_inventory' pk=object.pk %}" class="btn btn-primary btn-sm">
+            <i class="mdi mdi-plus-thick" aria-hidden="true"></i> Add Inventory Item
+          </a>
         </div>
-        {% if perms.dcim.add_inventoryitem %}
-            <div class="bulk-button-group">
-                <a href="{% url 'dcim:inventoryitem_add' %}?device={{ object.pk }}&return_url={% url 'dcim:device_inventory' pk=object.pk %}" class="btn btn-primary btn-sm">
-                    <i class="mdi mdi-plus-thick" aria-hidden="true"></i> Add Inventory Item
-                </a>
-            </div>
-        {% endif %}
+      {% endif %}
     </div>
   </form>
 {% endblock %}

+ 22 - 20
netbox/templates/dcim/device/modulebays.html

@@ -16,28 +16,30 @@
     </div>
 
     <div class="noprint bulk-buttons">
+      <div class="bulk-button-group">
+        {% if perms.dcim.change_modulebay %}
+          <div class="btn-group" role="group">
+            <button type="submit" name="_edit" formaction="{% url 'dcim:modulebay_bulk_edit' %}?device={{ object.pk }}&return_url={% url 'dcim:device_modulebays' pk=object.pk %}" class="btn btn-warning btn-sm">
+              <i class="mdi mdi-pencil" aria-hidden="true"></i> Edit
+            </button>
+            <button type="submit" name="_rename" formaction="{% url 'dcim:modulebay_bulk_rename' %}?return_url={% url 'dcim:device_modulebays' pk=object.pk %}" class="btn btn-outline-warning btn-sm">
+              <i class="mdi mdi-pencil-outline" aria-hidden="true"></i> Rename
+            </button>
+          </div>
+        {% endif %}
+        {% if perms.dcim.delete_modulebay %}
+          <button type="submit" formaction="{% url 'dcim:modulebay_bulk_delete' %}?return_url={% url 'dcim:device_modulebays' pk=object.pk %}" class="btn btn-danger btn-sm">
+            <i class="mdi mdi-trash-can-outline" aria-hidden="true"></i> Delete
+          </button>
+        {% endif %}
+      </div>
+      {% if perms.dcim.add_modulebay %}
         <div class="bulk-button-group">
-            {% if perms.dcim.change_modulebay %}
-                <button type="submit" name="_rename" formaction="{% url 'dcim:modulebay_bulk_rename' %}?return_url={% url 'dcim:device_modulebays' pk=object.pk %}" class="btn btn-outline-warning btn-sm">
-                    <i class="mdi mdi-pencil-outline" aria-hidden="true"></i> Rename
-                </button>
-                <button type="submit" name="_edit" formaction="{% url 'dcim:modulebay_bulk_edit' %}?device={{ object.pk }}&return_url={% url 'dcim:device_modulebays' pk=object.pk %}" class="btn btn-warning btn-sm">
-                    <i class="mdi mdi-pencil" aria-hidden="true"></i> Edit
-                </button>
-            {% endif %}
-            {% if perms.dcim.delete_modulebay %}
-                <button type="submit" formaction="{% url 'dcim:modulebay_bulk_delete' %}?return_url={% url 'dcim:device_modulebays' pk=object.pk %}" class="btn btn-outline-danger btn-sm">
-                    <i class="mdi mdi-trash-can-outline" aria-hidden="true"></i> Delete selected
-                </button>
-            {% endif %}
+          <a href="{% url 'dcim:modulebay_add' %}?device={{ object.pk }}&return_url={% url 'dcim:device_modulebays' pk=object.pk %}" class="btn btn-primary btn-sm">
+            <i class="mdi mdi-plus-thick" aria-hidden="true"></i> Add Module Bays
+          </a>
         </div>
-        {% if perms.dcim.add_modulebay %}
-            <div class="bulk-button-group">
-                <a href="{% url 'dcim:modulebay_add' %}?device={{ object.pk }}&return_url={% url 'dcim:device_modulebays' pk=object.pk %}" class="btn btn-primary btn-sm">
-                    <i class="mdi mdi-plus-thick" aria-hidden="true"></i> Add Module Bays
-                </a>
-            </div>
-        {% endif %}
+      {% endif %}
     </div>
   </form>
   {% table_config_form table %}

+ 29 - 23
netbox/templates/dcim/device/poweroutlets.html

@@ -16,31 +16,37 @@
     </div>
 
     <div class="noprint bulk-buttons">
+      <div class="bulk-button-group">
+        {% if perms.dcim.change_powerport %}
+          <div class="btn-group" role="group">
+            <button type="submit" name="_edit" formaction="{% url 'dcim:poweroutlet_bulk_edit' %}?device={{ object.pk }}&return_url={% url 'dcim:device_poweroutlets' pk=object.pk %}" class="btn btn-warning btn-sm">
+              <i class="mdi mdi-pencil" aria-hidden="true"></i> Edit
+            </button>
+            <button type="submit" name="_rename" formaction="{% url 'dcim:poweroutlet_bulk_rename' %}?return_url={% url 'dcim:device_poweroutlets' pk=object.pk %}" class="btn btn-outline-warning btn-sm">
+              <i class="mdi mdi-pencil-outline" aria-hidden="true"></i> Rename
+            </button>
+          </div>
+        {% endif %}
+        <div class="btn-group" role="group">
+          {% if perms.dcim.delete_poweroutlet %}
+            <button type="submit" formaction="{% url 'dcim:poweroutlet_bulk_delete' %}?return_url={% url 'dcim:device_poweroutlets' pk=object.pk %}" class="btn btn-danger btn-sm">
+              <i class="mdi mdi-trash-can-outline" aria-hidden="true"></i> Delete
+            </button>
+          {% endif %}
+          {% if perms.dcim.change_powerport %}
+            <button type="submit" name="_disconnect" formaction="{% url 'dcim:poweroutlet_bulk_disconnect' %}?return_url={% url 'dcim:device_poweroutlets' pk=object.pk %}" class="btn btn-outline-danger btn-sm">
+              <span class="mdi mdi-ethernet-cable-off" aria-hidden="true"></span> Disconnect
+            </button>
+          {% endif %}
+        </div>
+      </div>
+      {% if perms.dcim.add_poweroutlet %}
         <div class="bulk-button-group">
-            {% if perms.dcim.change_powerport %}
-                <button type="submit" name="_rename" formaction="{% url 'dcim:poweroutlet_bulk_rename' %}?return_url={% url 'dcim:device_poweroutlets' pk=object.pk %}" class="btn btn-outline-warning btn-sm">
-                    <i class="mdi mdi-pencil-outline" aria-hidden="true"></i> Rename
-                </button>
-                <button type="submit" name="_edit" formaction="{% url 'dcim:poweroutlet_bulk_edit' %}?device={{ object.pk }}&return_url={% url 'dcim:device_poweroutlets' pk=object.pk %}" class="btn btn-warning btn-sm">
-                    <i class="mdi mdi-pencil" aria-hidden="true"></i> Edit
-                </button>
-                <button type="submit" name="_disconnect" formaction="{% url 'dcim:poweroutlet_bulk_disconnect' %}?return_url={% url 'dcim:device_poweroutlets' pk=object.pk %}" class="btn btn-outline-danger btn-sm">
-                    <span class="mdi mdi-ethernet-cable-off" aria-hidden="true"></span> Disconnect
-                </button>
-            {% endif %}
-            {% if perms.dcim.delete_poweroutlet %}
-                <button type="submit" formaction="{% url 'dcim:poweroutlet_bulk_delete' %}?return_url={% url 'dcim:device_poweroutlets' pk=object.pk %}" class="btn btn-danger btn-sm">
-                    <i class="mdi mdi-trash-can-outline" aria-hidden="true"></i> Delete
-                </button>
-            {% endif %}
+          <a href="{% url 'dcim:poweroutlet_add' %}?device={{ object.pk }}&return_url={% url 'dcim:device_poweroutlets' pk=object.pk %}" class="btn btn-primary btn-sm">
+            <i class="mdi mdi-plus-thick" aria-hidden="true"></i> Add Power Outlets
+          </a>
         </div>
-        {% if perms.dcim.add_poweroutlet %}
-            <div class="bulk-button-group">
-                <a href="{% url 'dcim:poweroutlet_add' %}?device={{ object.pk }}&return_url={% url 'dcim:device_poweroutlets' pk=object.pk %}" class="btn btn-primary btn-sm">
-                    <i class="mdi mdi-plus-thick" aria-hidden="true"></i> Add Power Outlets
-                </a>
-            </div>
-        {% endif %}
+      {% endif %}
     </div>
   </form>
 {% endblock %}

+ 29 - 23
netbox/templates/dcim/device/powerports.html

@@ -16,31 +16,37 @@
     </div>
 
     <div class="noprint bulk-buttons">
+      <div class="bulk-button-group">
+        {% if perms.dcim.change_powerport %}
+          <div class="btn-group" role="group">
+            <button type="submit" name="_edit" formaction="{% url 'dcim:powerport_bulk_edit' %}?device={{ object.pk }}&return_url={% url 'dcim:device_powerports' pk=object.pk %}" class="btn btn-warning btn-sm">
+              <i class="mdi mdi-pencil" aria-hidden="true"></i> Edit
+            </button>
+            <button type="submit" name="_rename" formaction="{% url 'dcim:powerport_bulk_rename' %}?return_url={% url 'dcim:device_powerports' pk=object.pk %}" class="btn btn-outline-warning btn-sm">
+              <i class="mdi mdi-pencil-outline" aria-hidden="true"></i> Rename
+            </button>
+          </div>
+        {% endif %}
+        <div class="btn-group" role="group">
+          {% if perms.dcim.delete_powerport %}
+            <button type="submit" name="_delete" formaction="{% url 'dcim:powerport_bulk_delete' %}?return_url={% url 'dcim:device_powerports' pk=object.pk %}" class="btn btn-danger btn-sm">
+              <i class="mdi mdi-trash-can-outline" aria-hidden="true"></i> Delete
+            </button>
+          {% endif %}
+          {% if perms.dcim.change_powerport %}
+            <button type="submit" name="_disconnect" formaction="{% url 'dcim:powerport_bulk_disconnect' %}?return_url={% url 'dcim:device_powerports' pk=object.pk %}" class="btn btn-outline-danger btn-sm">
+              <span class="mdi mdi-ethernet-cable-off" aria-hidden="true"></span> Disconnect
+            </button>
+          {% endif %}
+        </div>
+      </div>
+      {% if perms.dcim.add_powerport %}
         <div class="bulk-button-group">
-            {% if perms.dcim.change_powerport %}
-                <button type="submit" name="_rename" formaction="{% url 'dcim:powerport_bulk_rename' %}?return_url={% url 'dcim:device_powerports' pk=object.pk %}" class="btn btn-outline-warning btn-sm">
-                    <i class="mdi mdi-pencil-outline" aria-hidden="true"></i> Rename
-                </button>
-                <button type="submit" name="_edit" formaction="{% url 'dcim:powerport_bulk_edit' %}?device={{ object.pk }}&return_url={% url 'dcim:device_powerports' pk=object.pk %}" class="btn btn-warning btn-sm">
-                    <i class="mdi mdi-pencil" aria-hidden="true"></i> Edit
-                </button>
-                <button type="submit" name="_disconnect" formaction="{% url 'dcim:powerport_bulk_disconnect' %}?return_url={% url 'dcim:device_powerports' pk=object.pk %}" class="btn btn-outline-danger btn-sm">
-                    <span class="mdi mdi-ethernet-cable-off" aria-hidden="true"></span> Disconnect
-                </button>
-            {% endif %}
-            {% if perms.dcim.delete_powerport %}
-                <button type="submit" name="_delete" formaction="{% url 'dcim:powerport_bulk_delete' %}?return_url={% url 'dcim:device_powerports' pk=object.pk %}" class="btn btn-danger btn-sm">
-                    <i class="mdi mdi-trash-can-outline" aria-hidden="true"></i> Delete
-                </button>
-            {% endif %}
+          <a href="{% url 'dcim:powerport_add' %}?device={{ object.pk }}&return_url={% url 'dcim:device_powerports' pk=object.pk %}" class="btn btn-sm btn-primary">
+            <i class="mdi mdi-plus-thick" aria-hidden="true"></i> Add Power Port
+          </a>
         </div>
-        {% if perms.dcim.add_powerport %}
-            <div class="bulk-button-group">
-                <a href="{% url 'dcim:powerport_add' %}?device={{ object.pk }}&return_url={% url 'dcim:device_powerports' pk=object.pk %}" class="btn btn-sm btn-primary">
-                    <i class="mdi mdi-plus-thick" aria-hidden="true"></i> Add Power Port
-                </a>
-            </div>
-        {% endif %}
+      {% endif %}
     </div>
   </form>
 {% endblock %}

+ 29 - 23
netbox/templates/dcim/device/rearports.html

@@ -16,31 +16,37 @@
     </div>
 
     <div class="noprint bulk-buttons">
+      <div class="bulk-button-group">
+        {% if perms.dcim.change_rearport %}
+          <div class="btn-group" role="group">
+            <button type="submit" name="_edit" formaction="{% url 'dcim:rearport_bulk_edit' %}?device={{ object.pk }}&return_url={% url 'dcim:device_rearports' pk=object.pk %}" class="btn btn-warning btn-sm">
+              <i class="mdi mdi-pencil" aria-hidden="true"></i> Edit
+            </button>
+            <button type="submit" name="_rename" formaction="{% url 'dcim:rearport_bulk_rename' %}?return_url={% url 'dcim:device_rearports' pk=object.pk %}" class="btn btn-outline-warning btn-sm">
+              <i class="mdi mdi-pencil-outline" aria-hidden="true"></i> Rename
+            </button>
+          </div>
+        {% endif %}
+        <div class="btn-group" role="group">
+          {% if perms.dcim.delete_rearport %}
+            <button type="submit" formaction="{% url 'dcim:rearport_bulk_delete' %}?return_url={% url 'dcim:device_rearports' pk=object.pk %}" class="btn btn-danger btn-sm">
+              <i class="mdi mdi-trash-can-outline" aria-hidden="true"></i> Delete
+            </button>
+          {% endif %}
+          {% if perms.dcim.change_rearport %}
+            <button type="submit" name="_disconnect" formaction="{% url 'dcim:rearport_bulk_disconnect' %}?return_url={% url 'dcim:device_rearports' pk=object.pk %}" class="btn btn-outline-danger btn-sm">
+              <span class="mdi mdi-ethernet-cable-off" aria-hidden="true"></span> Disconnect
+            </button>
+          {% endif %}
+        </div>
+      </div>
+      {% if perms.dcim.add_rearport %}
         <div class="bulk-button-group">
-            {% if perms.dcim.change_rearport %}
-                <button type="submit" name="_rename" formaction="{% url 'dcim:rearport_bulk_rename' %}?return_url={% url 'dcim:device_rearports' pk=object.pk %}" class="btn btn-outline-warning btn-sm">
-                    <i class="mdi mdi-pencil-outline" aria-hidden="true"></i> Rename
-                </button>
-                <button type="submit" name="_edit" formaction="{% url 'dcim:rearport_bulk_edit' %}?device={{ object.pk }}&return_url={% url 'dcim:device_rearports' pk=object.pk %}" class="btn btn-warning btn-sm">
-                    <i class="mdi mdi-pencil" aria-hidden="true"></i> Edit
-                </button>
-                <button type="submit" name="_disconnect" formaction="{% url 'dcim:rearport_bulk_disconnect' %}?return_url={% url 'dcim:device_rearports' pk=object.pk %}" class="btn btn-outline-danger btn-sm">
-                    <span class="mdi mdi-ethernet-cable-off" aria-hidden="true"></span> Disconnect
-                </button>
-            {% endif %}
-            {% if perms.dcim.delete_rearport %}
-                <button type="submit" formaction="{% url 'dcim:rearport_bulk_delete' %}?return_url={% url 'dcim:device_rearports' pk=object.pk %}" class="btn btn-danger btn-sm">
-                    <i class="mdi mdi-trash-can-outline" aria-hidden="true"></i> Delete
-                </button>
-            {% endif %}
+          <a href="{% url 'dcim:rearport_add' %}?device={{ object.pk }}&return_url={% url 'dcim:device_rearports' pk=object.pk %}" class="btn btn-primary btn-sm">
+            <i class="mdi mdi-plus-thick" aria-hidden="true"></i> Add rear ports
+          </a>
         </div>
-        {% if perms.dcim.add_rearport %}
-            <div class="bulk-button-group">
-                <a href="{% url 'dcim:rearport_add' %}?device={{ object.pk }}&return_url={% url 'dcim:device_rearports' pk=object.pk %}" class="btn btn-primary btn-sm">
-                    <i class="mdi mdi-plus-thick" aria-hidden="true"></i> Add rear ports
-                </a>
-            </div>
-        {% endif %}
+      {% endif %}
     </div>
   </form>
 {% endblock %}

+ 12 - 4
netbox/templates/dcim/device_list.html

@@ -1,10 +1,8 @@
 {% extends 'generic/object_list.html' %}
+{% load buttons %}
 
 {% block bulk_buttons %}
   {% if perms.dcim.change_device %}
-    <button type="submit" name="_rename" formaction="{% url 'dcim:device_bulk_rename' %}?return_url={% url 'dcim:device_list' %}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}" class="btn btn-outline-warning btn-sm">
-      <i class="mdi mdi-pencil-outline" aria-hidden="true"></i> Rename
-    </button>
     <div class="dropdown">
       <button type="button" class="btn btn-sm btn-primary dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
         <i class="mdi mdi-plus-thick" aria-hidden="true"></i> Add Components
@@ -76,5 +74,15 @@
       </ul>
     </div>
   {% endif %}
-  {{ block.super }}
+  {% if 'bulk_edit' in actions %}
+    <div class="btn-group" role="group">
+      {% bulk_edit_button model query_params=request.GET %}
+      <button type="submit" name="_rename" formaction="{% url 'dcim:device_bulk_rename' %}?return_url={% url 'dcim:device_list' %}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}" class="btn btn-outline-warning btn-sm">
+        <i class="mdi mdi-pencil-outline" aria-hidden="true"></i> Rename
+      </button>
+    </div>
+  {% endif %}
+  {% if 'bulk_delete' in actions %}
+    {% bulk_delete_button model query_params=request.GET %}
+  {% endif %}
 {% endblock %}

+ 22 - 21
netbox/templates/virtualization/virtualmachine/interfaces.html

@@ -15,27 +15,28 @@
     </div>
 
     <div class="noprint">
-        {% if perms.virtualization.change_vminterface %}
-            <button type="submit" name="_rename" formaction="{% url 'virtualization:vminterface_bulk_rename' %}?return_url={% url 'virtualization:virtualmachine_interfaces' pk=object.pk %}" class="btn btn-warning btn-sm">
-                <span class="mdi mdi-pencil" aria-hidden="true"></span> Rename
-            </button>
-            <button type="submit" name="_edit" formaction="{% url 'virtualization:vminterface_bulk_edit' %}?virtual_machine={{ object.pk }}&return_url={% url 'virtualization:virtualmachine_interfaces' pk=object.pk %}" class="btn btn-warning btn-sm">
-                <span class="mdi mdi-pencil" aria-hidden="true"></span> Edit
-            </button>
-        {% endif %}
-        {% if perms.virtualization.delete_vminterface %}
-            <button type="submit" name="_delete" formaction="{% url 'virtualization:vminterface_bulk_delete' %}?return_url={% url 'virtualization:virtualmachine_interfaces' pk=object.pk %}" class="btn btn-danger btn-sm">
-                <span class="mdi mdi-trash-can-outline" aria-hidden="true"></span> Delete
-            </button>
-        {% endif %}
-        {% if perms.virtualization.add_vminterface %}
-            <div class="float-end">
-                <a href="{% url 'virtualization:vminterface_add' %}?virtual_machine={{ object.pk }}&return_url={% url 'virtualization:virtualmachine_interfaces' pk=object.pk %}" class="btn btn-primary btn-sm">
-                    <span class="mdi mdi-plus-thick" aria-hidden="true"></span> Add interfaces
-                </a>
-            </div>
-        {% endif %}
-        <div class="clearfix"></div>
+      {% if perms.virtualization.change_vminterface %}
+        <div class="btn-group" role="group">
+          <button type="submit" name="_edit" formaction="{% url 'virtualization:vminterface_bulk_edit' %}?virtual_machine={{ object.pk }}&return_url={% url 'virtualization:virtualmachine_interfaces' pk=object.pk %}" class="btn btn-warning btn-sm">
+            <span class="mdi mdi-pencil" aria-hidden="true"></span> Edit
+          </button>
+          <button type="submit" name="_rename" formaction="{% url 'virtualization:vminterface_bulk_rename' %}?return_url={% url 'virtualization:virtualmachine_interfaces' pk=object.pk %}" class="btn btn-outline-warning btn-sm">
+            <span class="mdi mdi-pencil" aria-hidden="true"></span> Rename
+          </button>
+        </div>
+      {% endif %}
+      {% if perms.virtualization.delete_vminterface %}
+        <button type="submit" name="_delete" formaction="{% url 'virtualization:vminterface_bulk_delete' %}?return_url={% url 'virtualization:virtualmachine_interfaces' pk=object.pk %}" class="btn btn-danger btn-sm">
+          <span class="mdi mdi-trash-can-outline" aria-hidden="true"></span> Delete
+        </button>
+      {% endif %}
+      {% if perms.virtualization.add_vminterface %}
+        <div class="float-end">
+          <a href="{% url 'virtualization:vminterface_add' %}?virtual_machine={{ object.pk }}&return_url={% url 'virtualization:virtualmachine_interfaces' pk=object.pk %}" class="btn btn-primary btn-sm">
+            <span class="mdi mdi-plus-thick" aria-hidden="true"></span> Add interfaces
+          </a>
+        </div>
+      {% endif %}
      </div>
   </form>
 {% endblock content %}