Toggle Stencils/Descriptions en la vista de Fila
Qué es
Un selector (toggle) que permite alternar entre dos modos de visualización en la página de una Fila (/rows/<id>):
- Stencils: cada equipo se dibuja con la imagen real de su stencil (la misma fuente que usa el editor de racks:
model_data.original_image) - Descriptions: renderizado original, caja con el nombre del equipo
La elección se recuerda por navegador (localStorage) y el modo por defecto es Stencils.
Por qué
Hasta la v1.66.13, la página de una Fila solo mostraba equipos como cajas con su nombre — útil para navegar, pero sin el aspecto real del rack. Los stencils visualizan mejor el contexto físico de los equipos en el centro de datos, facilitando la comunicación entre equipos operativos.
Cómo funciona
Interfaz
- Control flotante en la esquina superior izquierda del lienzo, espejo del control de zoom
- Dos botones: “Stencils” y “Descriptions”
- Estado activo se marca con clase
btn-action; inactivo conbtn-neutral
Lógica
-
Inicialización: al cargar la página, consulta
localStorage['crearack-row-view-mode']- Si no existe o es inválido → modo Stencils (fallback por defecto)
- Si es
'descriptions'→ modo Descriptions
-
Carga de imagen: cuando se construye cada equipo en el canvas (Konva.js):
- Se extrae
model_data.original_image(ya viajaba en el payload, cambio 100% frontend) - Se normaliza la ruta (prefijo
/static/si no comienza conhttpo/) - Se crea un
Konva.Imageasync; hasta que cargue (o si falla), se muestra la caja
- Se extrae
-
Aplicación de modo: función
applyDevViewMode(dev)aplica la vista a cada equipo:- Si Stencils + imagen cargada: muestra imagen (opacidad 1), caja de marco (stroke solo, sin fill), nombre oculto
- Si Descriptions o sin imagen: muestra caja rellena, nombre visible
-
Persistencia: al hacer clic en un botón, se actualiza
localStoragey se recalcula toda la capa
Fallbacks y robustez
- Un equipo sin imagen (
model_data.original_imagevacío,Noneo falta): siempre se muestra como caja - Si la imagen falla al cargar: se vuelve a caja (mismo patrón que en el editor de racks)
- Drag & drop, clic-al-editor, PDUs 0U: intactos en ambos modos
Traducción
4 strings nuevos al catálogo español (locale/es/LC_MESSAGES/django.po), validado con check_po.py:
msgid "Stencils"
msgstr "Stencils"
msgid "Descriptions"
msgstr "Descripciones"
msgid "Show devices as stencil images"
msgstr "Mostrar los equipos como imágenes de stencil"
msgid "Show devices as boxes with their names"
msgstr "Mostrar los equipos como cajas con su nombre"
Cambios en detalle
| Archivo | Cambio |
|---|---|
static/js/rows/row_view.js | Constantes VIEW_MODE_KEY, viewMode; funciones applyDevViewMode(), applyViewMode(); listeners de botones; carga async de imagen en placeDeviceNode() |
static/css/pages/row.css | Nuevo selector .row-view-ctrl (posicionamiento 14px arriba-izquierda, espejo del zoom) |
templates/row.html | Dos botones #row-view-stencils e #row-view-descriptions dentro de .row-view-ctrl |
locale/es/LC_MESSAGES/django.po | 4 strings + validación |
CHANGELOG.md / RELEASE_NOTES.md | Documentación de la feature |
config/settings/base.py | APP_VERSION → 1.66.14 |
Impacto en usuario
- La página de Fila se abre en modo Stencils por defecto (si no tiene preferencia guardada)
- Si una conexión lenta o hay equipos sin stencil, se ve caja (sin errores)
- Flujos de trabajo (arrastrar, clic-al-editor) sin cambios
Véase también
- [[entity—racks—model—device]]
- [[entity—racks—model—stencil]]
- [[entity—racks—model—rack]]
- [[concept—racks—editor]]
- [[concept—racks—dcim-core]]