{% extends 'generic/object.html' %} {% load static %} {% load i18n %} {% load rack_design %} {# Interactive single-rack layout editor (Stage 2, slice 2a: MOVE + REMOVE). #} {# Forks design_elevation.html but initialises GridStack WITHOUT staticGrid so #} {# slots can be dragged vertically (and between faces / into the non-racked #} {# tray). editor.js hydrates from #rd-editor-data, tracks each widget's original #} {# (u_position, face), and POSTs a diff to data-save-url. NO model changes. #} {# #} {# Widget indices: views.py builds `widgets` (and widgets_json) in the order #} {# (*front, *rear, *non_racked). Each grid-stack-item below is stamped with the #} {# matching GLOBAL index via `gs-id`/data-widget-index so editor.js can pair the #} {# JSON payload to its DOM tile: front uses forloop.counter0; rear adds the #} {# front length; the tray adds front+rear lengths. #} {% block head %} {{ block.super }} {% endblock head %} {% block content %}
{design.name}, {device.site.name}.{% endblocktrans %}
{% trans "No racks in this design yet — open Racks → Add rack to start." %}