{{- /* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Commercial */ -}} {{- /* SPDX-FileCopyrightText: 2025-2026 Christian Galo */ -}} {{/* operator_plan_ladders.html Plan ladders list body partial for GET /operator/plan-ladders (a catalog surface below the Products rail entry: trail plus the shared catalog pill row), dispatched by GetPlanLaddersPage. Built from the page-anatomy parts. Map-first (ux-ia-naming 2.2): the cross-ladder topology overview opens the page. Rows navigate through the ladder's name (chrome-conventions "Row navigation is the primary column's link"). Ladder creation has a page of its own, reached from the ladder list's section header (design D20, round 4: "record creation gets its own page"). */}} {{ template "pageHeader" .Header }} {{ template "catalogPills" "plan-ladders" }} {{ if .Error }} {{ end }} {{ template "sectionHeader" .TopologyHeader }} {{ template "operator_plan_topology.html" .Topology }} {{/* design D8 / plan-ladder-management "The ladder list is a scaffolded section": a section header plus the list scaffold (search, true-total paging; operator-list-scale), not a bare table at the foot of the page. Governed like the other standalone lists (operator_persons.html): zero rows AND filtered means the search matched nothing; zero rows AND not filtered means the deployment truly has no ladders yet. */}} {{ template "sectionHeader" .LaddersListHeader }} {{ if eq (len .Ladders) 0 }} {{ if .LaddersNav.Filtered }} {{ template "listControls" .LaddersNav }} {{ template "listNoMatch" .LaddersNav }} {{ else }} {{ template "emptyState" .Empty }} {{ end }} {{ else }} {{ template "listControls" .LaddersNav }}
{{ range .Ladders }} {{ end }}
Name Tiers Active positions Actions
{{ .Name }} {{ .TierCount }} {{ if gt .ActiveAttachmentCount 0 }}{{ .ActiveAttachmentCount }}{{ else }}0{{ end }} {{ if gt .ActiveAttachmentCount 0 }} {{ template "disabledControl" .DeleteControl }} {{ else }} {{ end }}
{{ template "listPager" .LaddersNav }} {{ end }}