Connection labels now appear as accent-bordered pills on the main arrow
between far and clicked segments, instead of plain paragraphs below the
trace. Unlabeled cables show a plain em-dash as before.
Rack table rows now carry .device-row class for every unit a device
occupies (not just the start row), giving multi-U devices a continuous
surface-colored background block. A bottom border on the last unit-row
visually separates it from the next device.
Added Connect Mode toggle button on rack and device views. When active,
clicking a port selects it (glowing accent border), clicking a second
port opens a mini form to choose connection type/color/labels and
create the cable in one flow. Escape or re-clicking deselects. Port
elements now use onclick JS instead of HTMX triggers to support both
normal inspection mode and connect mode.
Added is_power_strip flag to device_models (schema migration, model,
form checkbox, DB CRUD). Power strip devices in rack view now render
a grid of plug-icon outlets instead of the regular port list, with
custom cable colors showing which outlets are in use.
The 'Create Connection' form now shows directly when clicking an
unconnected port instead of being hidden inside a <details> element
requiring two clicks. Added a 'New Device' nav link that jumps to
the create form on the overview page.
When a connection create fails (e.g. port already in use), the error
message now appears as a red alert in the modal instead of silently
re-rendering the 'no connection' state. Added Error field to
ConnectionModalData and created renderConnectionModalError helper.
Each rack card now displays the number of devices inside (racked +
unplaced). Introduced a RackCard wrapper in the overview handler to
pair each rack with its precomputed count.
The rack creation form now includes a Height (U) input defaulting to 42.
The handler reads it instead of hardcoding. Previously every rack was
silently locked at 42U until you went to the rack page to edit it.
Port spans now pick up the connection's actual color for border and a
light tint for background via inline styles. The .connected CSS class
only ups the border width to 2px for emphasis. Applied to _port_list.html
shared partial and wall_sockets.html inline rendering.
Grid sections for Racks and Devices now show a dashed 'No X yet' message
when the collection is empty, using Go template {{else}} blocks. CSS
styles the placeholder with muted text and a dashed border.
Added toggleRackHeight() to show/hide the height-in-units field when the
rack-mountable checkbox changes. Added togglePatchMode() to disable the
port side selector when is_patch_panel is checked, with an explanatory
note that all ports get doubled to front+back anyway. Also initializes
both states on page load so edit view reflects saved values.
Replaced independent flex columns with a single table where each rack
unit is a <tr> containing both front and back content. Row heights now
stay locked together regardless of device name length. Device-start
rows get a top border and surface background for visual grouping.
Replaced the flat 1000-entry select with optgroup grouping by device.
Each device gets its own optgroup label, making it possible to find
the target port even with hundreds of ports in the system.
Extracted shared _port_list.html partial with connected-port checking,
loaded into every page's template set. DeviceView and WallSocket handlers
now load connection data and pass it to the template. Removed duplicate
inline port_list definition from rack.html.