diff --git a/README.md b/README.md index e395daf..468cac2 100644 --- a/README.md +++ b/README.md @@ -132,6 +132,12 @@ autorisierten Rack-Datensatz. Die Topology-Rack-Ansicht leitet ihre Breiten ausschließlich aus den Geräten ab, die der Topology-View tatsächlich in seine HTML-Antwort geschrieben hat. Zusätzliche Berechtigungsabfragen können die beiden Ansichten dadurch nicht mehr fälschlich leeren. +Ab Version `0.9.7` enthält Reorder eigene 12-Spalten-CSS-Regeln. Diese beheben +die Inkompatibilität zwischen GridStack 10 aus Reorder Rack `1.1.4` und dem +GridStack-11-Stylesheet von NetBox 4.6.7, durch die Gerätekacheln mit einer +berechneten Breite von `0px` unsichtbar waren. Topology-Breiten werden außerdem +nach dem vollständigen Rendern zentral auf die HTTP-Antwort angewendet und +zusätzlich direkt in die vorhandenen Geräte-Styles geschrieben. Bereits vorhandene Geräte, die dieselbe HE und Rackseite belegen, aber noch keine Plugin-Platzierungszeile besitzen, werden in Rack-SVG, Reorder und der Topology-Rack-Ansicht ohne Datenbankänderung gleichmäßig nebeneinander diff --git a/netbox_utilities/__init__.py b/netbox_utilities/__init__.py index 2bd9433..dd45012 100644 --- a/netbox_utilities/__init__.py +++ b/netbox_utilities/__init__.py @@ -1,6 +1,6 @@ from netbox.plugins import PluginConfig, get_plugin_config -__version__ = "0.9.6" +__version__ = "0.9.7" class NetBoxUtilitiesConfig(PluginConfig): @@ -38,10 +38,6 @@ class NetBoxUtilitiesConfig(PluginConfig): from .reorder_rack import install_reorder_rack_bulk_save install_reorder_rack_bulk_save() - if get_plugin_config("netbox_utilities", "topology_views_rack_width_enabled"): - from .topology_views import install_topology_rack_width_support - - install_topology_rack_width_support() config = NetBoxUtilitiesConfig diff --git a/netbox_utilities/middleware.py b/netbox_utilities/middleware.py index 4e6199a..1abde76 100644 --- a/netbox_utilities/middleware.py +++ b/netbox_utilities/middleware.py @@ -22,7 +22,10 @@ class GlobalTenantFilterMiddleware: try: if scope is not None and request.method in {"GET", "HEAD"}: self._inject_filter_parameter(request, scope) - return self.get_response(request) + response = self.get_response(request) + from .topology_views import apply_topology_rack_widths + + return apply_topology_rack_widths(request, response) finally: active_tenant_scope.reset(token) diff --git a/netbox_utilities/static/netbox_utilities/netbox_utilities.css b/netbox_utilities/static/netbox_utilities/netbox_utilities.css index 831f1e1..3a64774 100644 --- a/netbox_utilities/static/netbox_utilities/netbox_utilities.css +++ b/netbox_utilities/static/netbox_utilities/netbox_utilities.css @@ -36,6 +36,41 @@ width: calc(var(--netbox-utilities-rack-device-width) - 6px) !important; } +/* + * netbox-reorder-rack 1.1.4 bundles GridStack 10, while NetBox 4.6.7 + * provides GridStack 11's base stylesheet. GridStack 11 calculates item + * widths through a CSS variable which the older runtime never sets. Without + * these explicit rules every 12-column widget therefore has width: 0px. + */ +.netbox-utilities-reorder-grid[gs-column="12"] > .grid-stack-item { + width: calc(100% / 12) !important; +} + +.netbox-utilities-reorder-grid[gs-column="12"] > .grid-stack-item[gs-w="2"] { width: calc(200% / 12) !important; } +.netbox-utilities-reorder-grid[gs-column="12"] > .grid-stack-item[gs-w="3"] { width: 25% !important; } +.netbox-utilities-reorder-grid[gs-column="12"] > .grid-stack-item[gs-w="4"] { width: calc(400% / 12) !important; } +.netbox-utilities-reorder-grid[gs-column="12"] > .grid-stack-item[gs-w="5"] { width: calc(500% / 12) !important; } +.netbox-utilities-reorder-grid[gs-column="12"] > .grid-stack-item[gs-w="6"] { width: 50% !important; } +.netbox-utilities-reorder-grid[gs-column="12"] > .grid-stack-item[gs-w="7"] { width: calc(700% / 12) !important; } +.netbox-utilities-reorder-grid[gs-column="12"] > .grid-stack-item[gs-w="8"] { width: calc(800% / 12) !important; } +.netbox-utilities-reorder-grid[gs-column="12"] > .grid-stack-item[gs-w="9"] { width: 75% !important; } +.netbox-utilities-reorder-grid[gs-column="12"] > .grid-stack-item[gs-w="10"] { width: calc(1000% / 12) !important; } +.netbox-utilities-reorder-grid[gs-column="12"] > .grid-stack-item[gs-w="11"] { width: calc(1100% / 12) !important; } +.netbox-utilities-reorder-grid[gs-column="12"] > .grid-stack-item[gs-w="12"] { width: 100% !important; } + +.netbox-utilities-reorder-grid[gs-column="12"] > .grid-stack-item[gs-x="0"] { left: 0 !important; } +.netbox-utilities-reorder-grid[gs-column="12"] > .grid-stack-item[gs-x="1"] { left: calc(100% / 12) !important; } +.netbox-utilities-reorder-grid[gs-column="12"] > .grid-stack-item[gs-x="2"] { left: calc(200% / 12) !important; } +.netbox-utilities-reorder-grid[gs-column="12"] > .grid-stack-item[gs-x="3"] { left: 25% !important; } +.netbox-utilities-reorder-grid[gs-column="12"] > .grid-stack-item[gs-x="4"] { left: calc(400% / 12) !important; } +.netbox-utilities-reorder-grid[gs-column="12"] > .grid-stack-item[gs-x="5"] { left: calc(500% / 12) !important; } +.netbox-utilities-reorder-grid[gs-column="12"] > .grid-stack-item[gs-x="6"] { left: 50% !important; } +.netbox-utilities-reorder-grid[gs-column="12"] > .grid-stack-item[gs-x="7"] { left: calc(700% / 12) !important; } +.netbox-utilities-reorder-grid[gs-column="12"] > .grid-stack-item[gs-x="8"] { left: calc(800% / 12) !important; } +.netbox-utilities-reorder-grid[gs-column="12"] > .grid-stack-item[gs-x="9"] { left: 75% !important; } +.netbox-utilities-reorder-grid[gs-column="12"] > .grid-stack-item[gs-x="10"] { left: calc(1000% / 12) !important; } +.netbox-utilities-reorder-grid[gs-column="12"] > .grid-stack-item[gs-x="11"] { left: calc(1100% / 12) !important; } + .netbox-utilities-sidebar-resizer { display: none; } diff --git a/netbox_utilities/templates/netbox_utilities/reorder_rack.html b/netbox_utilities/templates/netbox_utilities/reorder_rack.html index d24ed51..81639e2 100644 --- a/netbox_utilities/templates/netbox_utilities/reorder_rack.html +++ b/netbox_utilities/templates/netbox_utilities/reorder_rack.html @@ -34,7 +34,7 @@
[\"'])(?P