From 27297c7556cf3c9659fdf79f5a77b49afe31706e Mon Sep 17 00:00:00 2001 From: Luke Anderson Date: Tue, 26 Sep 2023 20:20:30 +0930 Subject: [PATCH] Add Hide Disconnected Button to Interface Summary, Remove Unused Table Caption Descriptor - Close #12732 --- netbox/dcim/tables/devices.py | 15 +++- netbox/project-static/dist/netbox.js | Bin 530368 -> 529836 bytes netbox/project-static/dist/netbox.js.map | Bin 450659 -> 450242 bytes .../src/tables/interfaceTable.ts | 69 +++++------------- .../device/inc/interface_table_controls.html | 1 + 5 files changed, 31 insertions(+), 54 deletions(-) diff --git a/netbox/dcim/tables/devices.py b/netbox/dcim/tables/devices.py index 34dbcbf30..624eb579b 100644 --- a/netbox/dcim/tables/devices.py +++ b/netbox/dcim/tables/devices.py @@ -64,9 +64,19 @@ def get_interface_state_attribute(record): Get interface enabled state as string to attach to DOM element. """ if record.enabled: - return "enabled" + return 'enabled' else: - return "disabled" + return 'disabled' + + +def get_interface_connected_attribute(record): + """ + Get interface disconnected state as string to attach to DOM element. + """ + if record.mark_connected or record.cable: + return 'connected' + else: + return 'disconnected' # @@ -674,6 +684,7 @@ class DeviceInterfaceTable(InterfaceTable): 'data-name': lambda record: record.name, 'data-enabled': get_interface_state_attribute, 'data-type': lambda record: record.type, + 'data-connected': get_interface_connected_attribute } diff --git a/netbox/project-static/dist/netbox.js b/netbox/project-static/dist/netbox.js index 84bfecae34920e732ecf52670208390ce6712040..ac5a6800292bbdffd0407da2b0b99f25e226bfb2 100644 GIT binary patch delta 25237 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 TN#paXd-hwu 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 L{`uG;kMjQy+GCjo diff --git a/netbox/project-static/dist/netbox.js.map b/netbox/project-static/dist/netbox.js.map index 7f2400ed2610973ed909703e534ec9b73c19c8ae..7dbfeca7a9d3a26ecee4ea6b390076a4186e29d3 100644 GIT binary patch delta 276 zcmaESK>E;L>4p}@7N!>F7M2#)Eo@(o8s|Ev=|nm@M(VgbI#xRAI6GQ8nLFuZIyrhf z>Qp*8`a0?ufJq430wg|N?-<*3Iag1R79%Gh>8$Uhf$H?4tuz*VNI2(lb(lC$Y_#}jPAj3(2YPp~<#csoY=On-Tb htyK`DEY}I*LtjV#BIoJFr`hzGG6J?QInB0T1OW6TRv!QW delta 737 zcmaJD#Q^f0T3{BqT<8;-6^2rls0m==9xPe~sM0cs3y#PJ z1c`P4HkHl~KIv;3tfe}#4b5QNf5pj=c{*Zvn_fvH<&3q = null; + // @ts-expect-error null handling is performed in the constructor + private disconnectedButton: ButtonState; /** * All table rows in table @@ -166,9 +167,10 @@ class TableState { this.table, 'button.toggle-virtual', ); - - const caption = this.table.querySelector('caption'); - this.caption = caption; + const toggleDisconnectedButton = findFirstAdjacent( + this.table, + 'button.toggle-disconnected', + ); if (toggleEnabledButton === null) { throw new TableStateError("Table is missing a 'toggle-enabled' button.", table); @@ -182,10 +184,15 @@ class TableState { throw new TableStateError("Table is missing a 'toggle-virtual' button.", table); } + if (toggleDisconnectedButton === null) { + throw new TableStateError("Table is missing a 'toggle-disconnected' button.", table); + } + // Attach event listeners to the buttons elements. toggleEnabledButton.addEventListener('click', event => this.handleClick(event, this)); toggleDisabledButton.addEventListener('click', event => this.handleClick(event, this)); toggleVirtualButton.addEventListener('click', event => this.handleClick(event, this)); + toggleDisconnectedButton.addEventListener('click', event => this.handleClick(event, this)); // Instantiate ButtonState for each button for state management. this.enabledButton = new ButtonState( @@ -200,6 +207,10 @@ class TableState { toggleVirtualButton, table.querySelectorAll('tr[data-type="virtual"]'), ); + this.disconnectedButton = new ButtonState( + toggleDisconnectedButton, + table.querySelectorAll('tr[data-connected="disconnected"]'), + ); } catch (err) { if (err instanceof TableStateError) { // This class is useless for tables that don't have toggle buttons. @@ -211,52 +222,6 @@ class TableState { } } - /** - * Get the table caption's text. - */ - private get captionText(): string { - if (this.caption !== null) { - return this.caption.innerText; - } - return ''; - } - - /** - * Set the table caption's text. - */ - private set captionText(value: string) { - if (this.caption !== null) { - this.caption.innerText = value; - } - } - - /** - * Update the table caption's text based on the state of each toggle button. - */ - private toggleCaption(): void { - const showEnabled = this.enabledButton.buttonState === 'show'; - const showDisabled = this.disabledButton.buttonState === 'show'; - const showVirtual = this.virtualButton.buttonState === 'show'; - - if (showEnabled && !showDisabled && !showVirtual) { - this.captionText = 'Showing Enabled Interfaces'; - } else if (showEnabled && showDisabled && !showVirtual) { - this.captionText = 'Showing Enabled & Disabled Interfaces'; - } else if (!showEnabled && showDisabled && !showVirtual) { - this.captionText = 'Showing Disabled Interfaces'; - } else if (!showEnabled && !showDisabled && !showVirtual) { - this.captionText = 'Hiding Enabled, Disabled & Virtual Interfaces'; - } else if (!showEnabled && !showDisabled && showVirtual) { - this.captionText = 'Showing Virtual Interfaces'; - } else if (showEnabled && !showDisabled && showVirtual) { - this.captionText = 'Showing Enabled & Virtual Interfaces'; - } else if (showEnabled && showDisabled && showVirtual) { - this.captionText = 'Showing Enabled, Disabled & Virtual Interfaces'; - } else { - this.captionText = ''; - } - } - /** * When toggle buttons are clicked, reapply visability all rows and * pass the event to all button handlers @@ -272,7 +237,7 @@ class TableState { instance.enabledButton.handleClick(event); instance.disabledButton.handleClick(event); instance.virtualButton.handleClick(event); - instance.toggleCaption(); + instance.disconnectedButton.handleClick(event); } } diff --git a/netbox/templates/dcim/device/inc/interface_table_controls.html b/netbox/templates/dcim/device/inc/interface_table_controls.html index 36605cd25..7868d99db 100644 --- a/netbox/templates/dcim/device/inc/interface_table_controls.html +++ b/netbox/templates/dcim/device/inc/interface_table_controls.html @@ -9,5 +9,6 @@ + {% endblock extra_table_controls %}