Răsfoiți Sursa

Improved rendering of boolean fields in tables

Jeremy Stretch 7 ani în urmă
părinte
comite
bf1c7cacc6
4 a modificat fișierele cu 24 adăugiri și 9 ștergeri
  1. 5 5
      netbox/dcim/tables.py
  2. 2 2
      netbox/extras/tables.py
  3. 2 2
      netbox/ipam/tables.py
  4. 15 0
      netbox/utilities/tables.py

+ 5 - 5
netbox/dcim/tables.py

@@ -4,7 +4,7 @@ import django_tables2 as tables
 from django_tables2.utils import Accessor
 from django_tables2.utils import Accessor
 
 
 from tenancy.tables import COL_TENANT
 from tenancy.tables import COL_TENANT
-from utilities.tables import BaseTable, ToggleColumn
+from utilities.tables import BaseTable, BooleanColumn, ToggleColumn
 from .models import (
 from .models import (
     ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay,
     ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay,
     DeviceBayTemplate, DeviceRole, DeviceType, Interface, InterfaceTemplate, InventoryItem, Manufacturer, Platform,
     DeviceBayTemplate, DeviceRole, DeviceType, Interface, InterfaceTemplate, InventoryItem, Manufacturer, Platform,
@@ -346,10 +346,10 @@ class DeviceTypeTable(BaseTable):
         args=[Accessor('pk')],
         args=[Accessor('pk')],
         verbose_name='Device Type'
         verbose_name='Device Type'
     )
     )
-    is_full_depth = tables.BooleanColumn(verbose_name='Full Depth')
-    is_console_server = tables.BooleanColumn(verbose_name='CS')
-    is_pdu = tables.BooleanColumn(verbose_name='PDU')
-    is_network_device = tables.BooleanColumn(verbose_name='Net')
+    is_full_depth = BooleanColumn(verbose_name='Full Depth')
+    is_console_server = BooleanColumn(verbose_name='CS')
+    is_pdu = BooleanColumn(verbose_name='PDU')
+    is_network_device = BooleanColumn(verbose_name='Net')
     subdevice_role = tables.TemplateColumn(
     subdevice_role = tables.TemplateColumn(
         template_code=SUBDEVICE_ROLE_TEMPLATE,
         template_code=SUBDEVICE_ROLE_TEMPLATE,
         verbose_name='Subdevice Role'
         verbose_name='Subdevice Role'

+ 2 - 2
netbox/extras/tables.py

@@ -3,7 +3,7 @@ from __future__ import unicode_literals
 import django_tables2 as tables
 import django_tables2 as tables
 from taggit.models import Tag
 from taggit.models import Tag
 
 
-from utilities.tables import BaseTable, ToggleColumn
+from utilities.tables import BaseTable, BooleanColumn, ToggleColumn
 from .models import ConfigContext, ObjectChange
 from .models import ConfigContext, ObjectChange
 
 
 TAG_ACTIONS = """
 TAG_ACTIONS = """
@@ -59,7 +59,7 @@ class TagTable(BaseTable):
 class ConfigContextTable(BaseTable):
 class ConfigContextTable(BaseTable):
     pk = ToggleColumn()
     pk = ToggleColumn()
     name = tables.LinkColumn()
     name = tables.LinkColumn()
-    is_active = tables.BooleanColumn(
+    is_active = BooleanColumn(
         verbose_name='Active'
         verbose_name='Active'
     )
     )
     actions = tables.TemplateColumn(
     actions = tables.TemplateColumn(

+ 2 - 2
netbox/ipam/tables.py

@@ -5,7 +5,7 @@ from django_tables2.utils import Accessor
 
 
 from dcim.models import Interface
 from dcim.models import Interface
 from tenancy.tables import COL_TENANT
 from tenancy.tables import COL_TENANT
-from utilities.tables import BaseTable, ToggleColumn
+from utilities.tables import BaseTable, BooleanColumn, ToggleColumn
 from .models import Aggregate, IPAddress, Prefix, RIR, Role, Service, VLAN, VLANGroup, VRF
 from .models import Aggregate, IPAddress, Prefix, RIR, Role, Service, VLAN, VLANGroup, VRF
 
 
 RIR_UTILIZATION = """
 RIR_UTILIZATION = """
@@ -193,7 +193,7 @@ class VRFTable(BaseTable):
 class RIRTable(BaseTable):
 class RIRTable(BaseTable):
     pk = ToggleColumn()
     pk = ToggleColumn()
     name = tables.LinkColumn(verbose_name='Name')
     name = tables.LinkColumn(verbose_name='Name')
-    is_private = tables.BooleanColumn(verbose_name='Private')
+    is_private = BooleanColumn(verbose_name='Private')
     aggregate_count = tables.Column(verbose_name='Aggregates')
     aggregate_count = tables.Column(verbose_name='Aggregates')
     actions = tables.TemplateColumn(template_code=RIR_ACTIONS, attrs={'td': {'class': 'text-right'}}, verbose_name='')
     actions = tables.TemplateColumn(template_code=RIR_ACTIONS, attrs={'td': {'class': 'text-right'}}, verbose_name='')
 
 

+ 15 - 0
netbox/utilities/tables.py

@@ -31,3 +31,18 @@ class ToggleColumn(tables.CheckBoxColumn):
     @property
     @property
     def header(self):
     def header(self):
         return mark_safe('<input type="checkbox" class="toggle" title="Toggle all" />')
         return mark_safe('<input type="checkbox" class="toggle" title="Toggle all" />')
+
+
+class BooleanColumn(tables.Column):
+    """
+    Custom implementation of BooleanColumn to render a nicely-formatted checkmark or X icon instead of a Unicode
+    character.
+    """
+    def render(self, value):
+        if value is True:
+            rendered = '<span class="text-success"><i class="fa fa-check"></i></span>'
+        elif value is False:
+            rendered = '<span class="text-danger"><i class="fa fa-close"></i></span>'
+        else:
+            rendered = '<span class="text-muted">&mdash;</span>'
+        return mark_safe(rendered)