diff --git a/netbox/extras/dashboard/widgets.py b/netbox/extras/dashboard/widgets.py index dcf83bc14..0b185d432 100644 --- a/netbox/extras/dashboard/widgets.py +++ b/netbox/extras/dashboard/widgets.py @@ -16,6 +16,7 @@ from django.utils.translation import gettext as _ from extras.choices import BookmarkOrderingChoices from extras.utils import FeatureQuery +from utilities.choices import ButtonColorChoices from utilities.forms import BootstrapMixin from utilities.permissions import get_permission_for_model from utilities.templatetags.builtins.filters import render_markdown @@ -115,6 +116,22 @@ class DashboardWidget: def name(self): return f'{self.__class__.__module__.split(".")[0]}.{self.__class__.__name__}' + @property + def fg_color(self): + """ + Return the appropriate foreground (text) color for the widget's color. + """ + if self.color in ( + ButtonColorChoices.CYAN, + ButtonColorChoices.GRAY, + ButtonColorChoices.GREY, + ButtonColorChoices.TEAL, + ButtonColorChoices.WHITE, + ButtonColorChoices.YELLOW, + ): + return ButtonColorChoices.BLACK + return ButtonColorChoices.WHITE + @property def form_data(self): return { diff --git a/netbox/ipam/views.py b/netbox/ipam/views.py index 490cf940b..7cf785521 100644 --- a/netbox/ipam/views.py +++ b/netbox/ipam/views.py @@ -1,7 +1,6 @@ from django.contrib.contenttypes.models import ContentType from django.db.models import F, Prefetch from django.db.models.expressions import RawSQL -from django.db.models.functions import Round from django.shortcuts import get_object_or_404, redirect, render from django.urls import reverse from django.utils.translation import gettext as _ @@ -11,6 +10,7 @@ from dcim.filtersets import InterfaceFilterSet from dcim.models import Interface, Site from netbox.views import generic from tenancy.views import ObjectContactsView +from utilities.tables import get_table_ordering from utilities.utils import count_related from utilities.views import ViewTab, register_model_view from virtualization.filtersets import VMInterfaceFilterSet @@ -606,7 +606,7 @@ class PrefixIPAddressesView(generic.ObjectChildrenView): return parent.get_child_ips().restrict(request.user, 'view').prefetch_related('vrf', 'tenant', 'tenant__group') def prep_table_data(self, request, queryset, parent): - if not request.GET.get('q') and not request.GET.get('sort'): + if not get_table_ordering(request, self.table): return add_available_ipaddresses(parent.prefix, queryset, parent.is_pool) return queryset @@ -952,7 +952,9 @@ class VLANGroupVLANsView(generic.ObjectChildrenView): ) def prep_table_data(self, request, queryset, parent): - return add_available_vlans(parent.get_child_vlans(), parent) + if not get_table_ordering(request, self.table): + return add_available_vlans(parent.get_child_vlans(), parent) + return queryset # diff --git a/netbox/templates/extras/dashboard/widget.html b/netbox/templates/extras/dashboard/widget.html index 1559363d3..b8dec3de2 100644 --- a/netbox/templates/extras/dashboard/widget.html +++ b/netbox/templates/extras/dashboard/widget.html @@ -9,14 +9,16 @@ gs-id="{{ widget.id }}" >