{{/* THE APP PAGE'S SHARED SHELL (v0.315.0). One header and one set of banners for all four tabs, so a held app says it is held on the log tab too and the household never has to go back to the details page to find out why. Order is load-bearing and is the alert-placement rule (R-571), unchanged: the page-level banners sit ABOVE the tab bar, because they are about the APP, not about the tab. An inline alert belongs inside the tab that owns it. The header carries NO Start/Restart/Stop. They used to sit here and read as menu buttons; they are now the first card of the „Beallitasok" tab, where a state change belongs. */}} {{define "app_shell_start"}} {{T "app_info.alkalmazasok"}}

{{.Meta.DisplayName}}

{{if .AppInfo.Tagline}}

{{.AppInfo.Tagline}}

{{else if .Meta.Description}}

{{.Meta.Description}}

{{end}}
{{if .Deployed}} ● {{stateLabel .Stack.State}} {{if .Stack.Orphaned}}{{T "common.elavult"}}{{end}} {{template "meta_badge" (lifecycleBadge .Meta)}} {{template "meta_badge" (updateBadge .Stack)}}{{if and (gt .Stack.LadderStepsLeft 0) (not .Stack.HoldReason)}}{{T "app_info.ladder_steps_left"}} {{.Stack.LadderStepsLeft}}{{end}} {{/* v0.316.0: the auto-update SUCCESS line is meta text here, not a banner below. A success that asked nothing of the household is a date, not news; the banners under the hero stay for the things that DO need them (a failed update, a hold, lost files, a missing drive) — R-571's placement rule is untouched. */}} {{if .EffectiveSubdomain}}{{.EffectiveSubdomain}}.{{.Domain}}{{end}} {{if .AutoUpdateLine}}{{.AutoUpdateLine}}{{end}} {{else}} ~{{.Meta.Resources.MemRequest}} RAM {{if .Meta.Category}}{{.Meta.Category}}{{end}} {{if .Meta.Resources.NeedsHDD}}{{T "common.hdd_szukseges"}}{{end}} {{if .Meta.Resources.HungarianUI}}{{T "common.magyar_felulet"}}{{end}} {{end}}
{{if and .Deployed .AppOperational .EffectiveSubdomain}}
{{T "app_info.megnyitas"}}
{{end}} {{if and .Deployed .Stack.Orphaned}}
{{end}}
{{template "app_banners" .}} {{template "app_tab_bar" .}} {{end}} {{/* app_banners — every page-level alert the app can carry, on EVERY tab. Each keeps the marker it had on the details page, so the tests and the operator's greps still find it. */}} {{define "app_banners"}} {{- if .Meta.IsAbandoned}}
{{T "app_info.az_alkalmazas_fejlesztoje_felhagyott_a"}}
{{- end}} {{- if .LostFiles}}

{{T "app_info.lost_files_title"}}

{{T "app_info.lost_files_text"}}{{if .LostBootAt}} {{.LostBootAt}}{{end}}

{{T "app_info.lost_files_hint"}}

{{- end}} {{if .Stack.Updating}}
{{updatePhaseText .Stack}}
{{else if and .Stack.HoldReason (eq .Stack.HoldKind "unhealthy_stop")}}
{{holdText .Stack}}
{{else if .Stack.HoldReason}}
{{holdText .Stack}}{{if not .Stack.HoldNoWholeCopy}} {{T "app_info.mentesek"}}{{end}}{{if .HoldLogKept}}
{{T "app_info.hold_log_kept"}} {{T "app_info.naplo"}}{{end}}
{{else if .Stack.UpdateError}}
{{updateErrorText .Stack}}
{{else if .UpdateUndoneLine}}
{{.UpdateUndoneLine}}
{{end}}{{if and .Stack.HealthProbe .Stack.HealthProbe.NotChecked}}{{/* R-772: the declared health check could not run — said, never shown as healthy. */}}

{{T "health.no_probe_container"}}

{{end}} {{if .MissingStorageLabel}}
{{T "app_info.hianyzo_tarhely"}} {{.MissingStorageLabel}}
{{T "app_info.ennek_az_alkalmazasnak_az_adattaroloja"}}
{{end}} {{end}} {{/* app_tab_bar — plain links, no JavaScript. An alert's link must land ON a tab, and the log poller must not run on the other three; hidden panels give neither. */}} {{define "app_tab_bar"}} {{- if .AppTabs}} {{- end}} {{end}} {{/* app_press_script — the shared POST-and-reload used by every card button on the page. It was the details page's own script; the cards moved to tabs and it came with them. */}} {{define "app_press_script"}} {{end}}